Как выполнить модульное тестирование объекта с запросами к базе данных - PullRequest
139 голосов
/ 27 августа 2008

Я слышал, что модульное тестирование "совершенно потрясающе", "действительно круто" и "всякого рода хорошие вещи", но 70% или более моих файлов связаны с доступом к базе данных (некоторые читают, а некоторые пишут), и я не знаете, как написать модульный тест для этих файлов.

Я использую PHP и Python, но я думаю, что этот вопрос относится к большинству / всем языкам, которые используют доступ к базе данных.

Ответы [ 13 ]

2 голосов
/ 27 августа 2008

Я никогда не делал этого в PHP, и я никогда не использовал Python, но то, что вы хотите сделать, это макетировать вызовы базы данных. Чтобы сделать это, вы можете реализовать какой-либо IoC , независимо от того, является ли он сторонним инструментом, или вы сами управляете им, затем вы можете реализовать некоторую ложную версию вызывающей стороны базы данных, в которой вы будете контролировать исход этого ложного вызова. *

Простую форму IoC можно выполнить, просто кодируя интерфейсы. Это требует некоторой объектной ориентации, происходящей в вашем коде, поэтому она может не относиться к тому, что вы делаете (я говорю, что все, что мне нужно, это упоминание PHP и Python)

Надеюсь, что это полезно, если у вас нет других терминов для поиска.

2 голосов
/ 27 августа 2008

Вы можете использовать mocking frameworks , чтобы абстрагировать ядро ​​базы данных. Я не знаю, есть ли PHP / Python, но для типизированных языков (C #, Java и т. Д.) Существует множество вариантов

Это также зависит от того, как вы спроектировали этот код доступа к базе данных, потому что некоторые разработки проще для модульного тестирования, чем другие, как упоминалось в предыдущих постах.

2 голосов
/ 27 августа 2008

Я обычно пытаюсь разбить свои тесты между тестированием объектов (и ORM, если таковые имеются) и тестированием БД. Я проверяю объектную сторону вещей, высмеивая вызовы доступа к данным, тогда как я проверяю сторону БД, проверяя взаимодействия объектов с БД, которая, по моему опыту, обычно довольно ограничена.

Раньше я разочаровывался в написании модульных тестов, пока не начал издеваться над частью доступа к данным, поэтому мне не нужно было создавать тестовую базу данных или генерировать тестовые данные на лету. Путем насмешки данных вы можете генерировать все это во время выполнения и быть уверенным, что ваши объекты работают должным образом с известными входными данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...