TDD для бизнес-приложений работает следующим образом.
Запишите бизнес-требования.
Запишите тест для этого требования.
Введите код, который проходит тест.
Хитрость в том, что существует множество ненужных некоммерческих требований, которые не требуют тщательного тестирования.
«Сохранение в базе данных» не является бизнес-требованием. Это технический.
«активирует кнопку в графическом интерфейсе для некоторых ситуаций» не является бизнес-требованием, это часть интерфейса.
«резервное копирование» не является бизнес-требованием; это безопасность или непрерывность бизнеса или что-то в этом роде.
Рассмотрим конкретный пример.
Требование - «Вы не можете брать книги, пока не заплатите штрафы».
Тесты.
Попытка одолжить книгу со штрафом.
Попытка одолжить книгу без штрафа.
код.
class FinesNotPaid( unittest.TestCase ):
def setUp( self ):
# load some fixtures with users, books and fines outstanding.
def test_should_not_checkout_book( self ):
x = TheCheckoutClass()
x.checkoutBook( someBook )
self.fail( "Should have thrown error" )
class FinesPaid( unittest.TestCase ):
def setUp( self ):
# load some fixtures with users, books and fines paid.
def test_should_not_checkout_book( self ):
x = TheCheckoutClass()
x.checkoutBook( someBook )
self.success( )
class NoFines( unittest.TestCase ):
etc.
Это бизнес-правила, реализуемые классами, которые отделены от вашей базы данных и вашего графического интерфейса. Это классы на уровне домена приложения.
Ваши CRUD-правила являются бизнес-правилами. Вы должны проверить их. Однако вам не нужно тестировать каждую функцию, связанную с базой данных. Вам нужно несколько "я могу создать и сохранить объект?" тесты. Вы должны верить, что ORM, уровень доступа к данным и база данных действительно работают. Вы не пишете тесты для исчерпывающего тестирования встроенных функций ORM.
Покрытие кода (100%, 80% или 10%) в значительной степени бессмысленно. Является ли программное обеспечение, тесты которого покрывают 80% кода, на самом деле на 20% более вероятным сбоем? Это не работает таким образом. Тестирование каждой строки кода не охватывает все логические пути, поэтому перестаньте беспокоиться и начните тестирование.
Проверка вариантов использования бизнеса. Если они проходят и есть непроверенный код, то, возможно, вы написали слишком много кода.