Просто: для проверки фактического DAO, а не содержимого базы данных.
Предположим, у вашего класса DAO Person есть метод getByName (). Вы пишете тест и вызываете Person.getByName («Джон Смит»). Предположим, что тест не пройден, потому что кто-то удалил запись Джона из базы данных. Теперь каждое программное обеспечение CI и ваши супервизоры / рецензенты могут утверждать, что ваше программное обеспечение неисправно, хотя на самом деле это не так. Если вы имитируете БД, вы можете доказать, что ваш DAO работает, если ему дана правильная строка из правильной таблицы.
Если вы действительно хотите проверить саму базу данных, то есть: если выполнение определенного метода DAO переводит данные в определенное состояние, то это также возможно. Более того, это действительно полезно для дурацких моделей данных (EAV, набор вложенных деревьев), где вы не можете ожидать, что база данных обеспечит пуленепробиваемую целостность. Взгляните на DBUnit, чтобы сделать вашу жизнь проще.