Что такое модульное тестирование? Тестирование
просто проверяет, что отдельные единицы кода (в основном функции) работают в соответствии с ожидаемыми. Обычно вы сами пишете тестовые случаи, но некоторые из них могут быть автоматически сгенерированы. Выход из теста
может быть таким же простым, как выход консоли, до green light" in a GUI such as в графическом интерфейсе, таком как NUnit, or a different language-specific framework. или другой языковой фреймворк.
Исполнительские модульные тесты разработаны, чтобы быть простыми, как правило, тесты написаны в виде функций, которые будут определять, является ли возвращенное значение равным значение, которое вы ожидали, когда вы написали функцию (или значение, которое вы будет ожидать , когда вы в конечном итоге написать его - это называется Test Driven Development when you write the tests first). при написании тестов в первую очередь).
Как вы выполняете модульные тесты?
Представьте себе очень простую функцию, которую вы хотели бы протестировать:
int CombineNumbers(int a, int b) {
return a+b;
}
Модульный тестовый код будет выглядеть примерно так:
void TestCombineNumbers() {
Assert.IsEqual(CombineNumbers(5, 10), 15); // Assert is an object that is part of your test framework
Assert.IsEqual(CombineNumbers(1000, -100), 900);
}
Когда вы запустите тесты, вы будете проинформированы о том, что эти тесты прошли. Теперь, когда вы построили и запустите тесты, вы знаете, что эта конкретная функция, или устройство, будет работать так, как вы ожидаете.
Теперь представьте себе, другой разработчик приходит и меняет CombineNumbers()
function for performance, or some other reason: функция для производительности, или по какой-то другой причине:
int CombineNumbers(int a, int b) {
return a * b;
}
Когда разработчик запускает тесты, которые вы создали для этой очень простой функции, они увидят, что первый Assert
fails, and they now know that the build is broken. не удается, и теперь они знают, что сборка сломана.
Когда следует проводить модульные тесты?
Они должны быть сделаны как можно чаще. Когда вы выполняете тесты в процессе разработки, ваш код автоматически будет разработан лучше, чем если бы вы просто написали функции, а затем перешли. Кроме того, такие понятия, как Dependency Injection are going to evolve naturally into your code. будут естественным образом развиваться в ваш код.
Наиболее очевидным преимуществом является знание вниз по дороге, что, когда изменения сделаны, никаких других отдельных единиц кода были затронуты им, если все они проходят тесты.