2008-10-14 2 views
-1

Я хотел бы знать, каковы ваши практики, когда вы тестируете свои классы.Каковы наилучшие практики в ваших тестах?

Например, мне нравится использовать наследование, с моими светильниками. Учитывая два класса BaseClass, SubClass, я делаю два других класса BaseClassFixture и SubClassFixture (SubClassFixture - это подкласс класса BaseClassFixture). Поэтому я уверен, что я не нарушаю код, который использует SubClass как BaseClass (и люди, которые расширяют мой класс, могут быть уверены, что они все делают правильно, создавая еще один подкласс моего инструментария).

Я также накладываю наследование с интерфейсами. Например, когда я создаю приспособление для IList, я проверяю, что любое добавление увеличивает счет на единицу. Когда у меня есть конкретный класс, который реализует IList, я просто создаю приспособление с именем MyConcreteClassIListFixture.

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

Я думаю, что это своего рода дизайн по контрактам (см. Bertrand Meyer), потому что я проверяю инвариант до и после любых тестов.

Я делаю это специально с опубликованными интерфейсами или классами.

А вы ... какие у вас практики?

+0

Этот вопрос кажется общим; голосуя вниз. Как нужно задавать более конкретные вопросы? – 2008-10-14 19:18:07

ответ

0

При написании модульного теста есть несколько важных вещей.

1) модульные тесты должны быть независимыми:

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

тесты

2) Аппарат должен быть быстро:

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

3) Хорошее соглашение об именовании:

тесты единицы должны иметь хорошее соглашение об именах и следует читать как истории.

Вот один пример:

общественного класса when_user_transfer_money_from_source_account_to_destination_account

общественных пустот make_sure_error_is_thrown_when_source_account_has_insufficient_funds() {

}

Вот хороший скринкаст, который охватывает многие из вышеуказанных пунктов:

http://screencastaday.com/ScreenCasts/32_Introduction_to_Mocking.aspx

1

Мое самое важное правило состоит в том, что каждый тест должен быть атомарным и должен работать в определенном порядке.

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

Кроме того, испытания должны следовать правилу DRY как можно больше вместе с кодом.

Смежные вопросы