Существует три способа организации модульных тестов: Test for Fixture, Class или Feature. Но атрибут NUnit для TestClass называется TestFixture. Есть ли исторические причины для этого?
Почему testFixture вместо TestClass?
Ответ 1
Основная историческая причина в том, что NUnit начал жизнь как прямой порт от JUnit, а junit назвал его тестовым креплением.
NUnit 1.0 был до моего времени, но мне сказали, что он начался, переименовав все .java файлы в JUnit в .cs файлы и пытаясь скомпилировать. Это было исправлено оттуда, и был добавлен пользовательский интерфейс. Когда я подключился к NUnit 2.0, в NUnit 1.0 по-прежнему был метод IsVisualAgeForJava
, так как у JUnit было специальное поведение для этого в то время.
В NUnit 2.0 наша цель состояла в том, чтобы сделать NUnit более .NETish. Поэтому мы добавили атрибуты и кучу других вещей. Все мы пришли из java-фона и много лет работали с JUnit. Было вполне естественно использовать [TestFixture]
.
Ответ 2
Я уважаю ответ Майка Два, но я бы сказал, что команда NUnit сделала это очень неправильно, а использование [TestFixture]
- это семантическая бородавка на лицевой стороне NUnit. Испытательный класс не является приспособлением. Из того, что я вникнул в JUnit, я не нашел ссылки на тестовый класс в качестве тестового прибора, и я не нашел много дискуссий о "тестовых приспособлениях", относящихся к тестовым классам. Скорее всего, обсуждение JUnit/xUnit о светильниках относится к настройке и разрыву, что, конечно же, является распространенным методом, используемым для настройки реальных тестовых приборов.
Обратите внимание, что в NUnit 2.5 вы можете удалить аннотацию [TestFixture].
Обновление: (июль 2012 г.)
Я просто читал книгу огурцов и на странице 99, автор Мэтт Уинн объясняет происхождение использования "приспособления". Я цитирую:
Существует давняя традиция (исходящая из мира аппаратного обеспечения, в которой были созданы испытательные приборы) для вызова связи между тестовой системой и тестируемой системой. Это роль "кода клея", которую мы упоминали в этой книге как код автоматизации. В рамках этого теста термин FIT использует этот термин. Некоторые инструменты тестирования модулей (например, NUnit) еще больше смутили проблему, обратившись к самому классу тестового примера как к устройству. Так много для вездесущего языка! (Wynne and Hellesoy, 2012)
Ответ 3
Теперь, когда вы спросите об этом, я просто посмотрел. Контрольное устройство - это фиксированное базовое состояние, которое должно быть установлено до начала испытаний, чтобы результаты были предсказуемыми и повторяемыми. В модульных системах тестирования мы используем атрибуты/методы SetUp и TearDown для создания/уничтожения тестового прибора (например, инициализация переменных экземпляра с помощью правильных объектов).