Это широкая и потенциально спорная тема ... так что будьте готовы к широкому кругу ответов и разногласий ...
Преимущество баз данных в памяти:
- Может сократить один набор интеграционных тестов, предназначенных для того, чтобы избежать случаев отложенной / явной загрузки и получить обратно правильно отформатированные объекты.
- В некоторых случаях может уменьшить код настройки, необходимый для каждого из ваших методов тестирования. например если вам нужно настроить дюжину ложных звонков на несколько разных имитаций.
- Иногда бывает проще рассуждать о тесте, понимая, что тестируется
Недостатки баз данных в памяти:
- Отсутствует полная изоляция для ваших юнит-тестов
- Требуется инициализация контейнера DI для юнит-тестов.
- Может обеспечивать ложное чувство безопасности в зависимости от того, насколько поставщик базы данных в памяти отличается от вашей производственной базы данных,
Преимущество издевается:
- Полностью изолировать тестируемый код
- Может настроить только то, что необходимо для поддержки ваших тестов. например не нужно настраивать полные и полные сущности.
- Тесты часто выполняются быстрее, и вы можете полностью игнорировать свою инфраструктуру DI для модульного тестирования (часть изоляции, но стоит упомянуть).
Недостатки издевательств:
- Тестовый код может стать сложным и хрупким в зависимости от того, насколько согласованы методы обслуживания и как они связаны со слоем DAO. то есть, если вам нужно установить вызов 20 фиктивных методов и три фиктивных объекта, это быстро становится утомительным (однако это должно быть признаком того, что ваша служба нуждается в рефакторинге).
Чтобы ответить на первый вопрос, который вы задали, о том, что происходит, когда в обоих случаях используется один и тот же метод - простой ответ. Это не тот же метод. Они делают две разные вещи. Один общается с базой данных, другой применяет бизнес-логику. Если у вас есть проход, вы все равно, вероятно, должны провести тест на нем и на уровне сервисов, чтобы убедиться, что он вызывает правильную вещь в вашем DAO.
Независимо от того, куда вы идете, не забудьте также провести интеграционный тест вашего кода!