При написании тестов, почему кто-то хотел бы использовать базу данных в памяти, а не просто издеваться над данными?
Я мог видеть, что базы данных в памяти могут быть полезны для тестирования своих репозиториев. Но если использовать каркас (такой как Spring Data), тестирование репозиториев будет проверять каркас, а не логику приложения.
Однако издевательство кажется более быстрым и следует той же схеме, которая обычно используется при написании модульных тестов и TDD.
Так чего мне не хватает? Когда / почему будет полезна база данных в памяти?
В большинстве случаев тестирование базы данных в памяти проще, чем имитация. Это также намного более гибко. И это также проверяет, что файлы миграции сделаны хорошо (когда есть файлы миграции).
Посмотрите этот псевдокод:
InMemoryTest
Не зависит от того, какDatabase
реализуется вUserRepository
к работе. Он просто используетUserRepository
открытый интерфейс (create
), а затем утверждает против него. Этот тест не сломается, если вы измените реализацию, но он будет медленнее.Между тем,
MockingDBTest
полностью полагается на то, какDatabase
реализовано вUserRepository
. На самом деле, если вы измените реализацию, но все равно заставите ее работать по-другому, этот тест будет сорван.Лучшее из обоих миров - использовать фальшивую реализацию
Database
интерфейса:Это намного более выразительно, легче для чтения и понимания, и это не зависит от реализации реальной базы данных, выполненной на более высоких уровнях кода.
источник