При модульном тестировании, как следует проводить тестирование инициализации объектов? - PullRequest
2 голосов
/ 01 ноября 2011

Таким образом, с большинством утилит для юнит-тестирования, с которыми я сталкивался, вы обычно получаете доступ к функциям SetUp () и TearDown ().Хотя я вижу, что это очень удобно почти для каждого модульного теста, мне было интересно, как следует тестировать инициализацию объектов?Я имею в виду, что почти во всех других тестах вы просто позволяете функции SetUp () справиться с этим.Однако в большинстве основных утилит тестирования, с которыми я работал, SetUp () вызывается перед каждым тестом.Мне было интересно, если вы просто проводите тестирование инициализации внутри функции SetUp (), нужно ли создавать собственную эквивалентную функцию SetUp (), которая вызывается явно в начале тестов, не связанных с тестированием инициализации, или есть какие-то другиеобщепринятую практику я не воспитывал?

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Инициализация объекта выполняется конструктором, поэтому «тестирование инициализации» означает «тестирование конструкторов».При тестировании нормального метода-мутатора вы выполняете интересующий метод, а затем делаете утверждения о состоянии объекта.Для конструктора это точно так же.Единственное отличие от тестирования обычного метода, если вы создаете тестовые приборы в своем методе setUp(), состоит в том, что методы теста не вызывают сам конструктор, а полагаются на вызов в методе установки.

Тем не менее, я отказался от стиля, в котором класс ThingTest, который тестирует класс Thing, имеет тестовые приборы класса Thing.Вместо этого я создаю объекты класса Thing непосредственно в тестовых методах, используя параметризованные тесты для уменьшения дублирования кода.Я считаю, что это позволяет избежать запаха загадочного гостя кода.

1 голос
/ 01 ноября 2011

Возможно, вы обдумываете это. Реализация setUp() является необязательной, и любой данный тест может игнорировать любое состояние, созданное setUp(). Таким образом, вы можете просто игнорировать это состояние для одного тестового метода, который тестирует инициализацию объекта, или создать отдельный тестовый класс только для тестовой инициализации, в которой есть пустой метод setUp().

...