Под тестированием я предполагаю, что вы имеете в виду тестовый дизайн. Тестовое проектирование в основном касается юнит-тестов, а иногда и интеграционных тестов. Модульные тесты тестируют самые маленькие тестируемые элементы кода, а интеграционные тесты - взаимодействие компонентов с вашим приложением.
Существует еще много форм тестирования, но разработчики обычно сами это делают. Другие тесты в основном смотрят на приложение извне и тестируют пользовательские интерфейсы, демонстрирующие различные качества, такие как корректность, производительность и масштабируемость.
Модульное тестирование включает в себя тестирование ваших методов, чтобы увидеть, делают ли они то, что вам нужно. Обычно это тесты настолько простые, что вы можете подумать, что они тривиальны. То, что вы хотите проверить, это логика вашего класса. Класс, который вы предоставляете, на самом деле не имеет такой большой логики.
Только private void UpdateHoleType(){...}
содержит любую логику, которая кажется визуально ориентированной логикой, которую всегда сложнее всего проверить. Написание тестов очень просто. Ниже приведен пример для типа просверленного отверстия.
[Test]
public void testDrilledHole()
{
Hole hole = new Hole();
hole.HoleType = HoleTypes.Drilled;
Assert.AreEqual(Visibility.Collapsed, hole.HoleDecorator.Visibility);
}
Если вы посмотрите на это, вы почти не посчитаете, что оно того стоит. Тест тривиален и очевиден. Атрибут [Test]
объявляет метод тестом, а метод Assert.AreEquals()
вызывает исключение, если предоставленные значения не равны. Фактическая конструкция может варьироваться в зависимости от используемой среды тестирования, но все они одинаково просты.
Хитрость в том, что вы пишете эти методы для всех методов вашего класса, выполняющих бизнес-логику, и тестируете несколько значений. null
всегда стоит попробовать.
Мощность модульного тестирования заключается в сочетании всех этих тестов. Теперь, если вы что-то изменили в классе, есть ряд тестов, проверяющих, что внесенное вами изменение нарушает одно из поведений, определенных вами в вашем тесте. Это позволяет вам работать с большим проектом, изменяя и внедряя новые функции, в то время как тесты сохраняют функциональность, которую вы уже закодировали.