Определение и назначение модульного тестирования

Модульное тестирование, или unit-тестирование (англ. unit testing) — процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы.

Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок. Цель модульного тестирования — изолировать отдельные части программы и показать, что по отдельности эти части работоспособны.

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

Для получения выгоды от модульного тестирования требуется строго следовать технологии тестирования во всём процессе разработки программного обеспечения. Нужно хранить не только записи обо всех проведённых тестах, но и обо всех изменениях исходного кода во всех модулях. С этой целью следует использовать систему контроля версий ПО. Таким образом, если более поздняя версия ПО не проходит тест, который был успешно пройден ранее, будет несложным сверить исходный код вариантов и устранить ошибку. Также необходимо убедиться в неизменном отслеживании и анализе неудачных тестов. Игнорирование этого требования приведёт к лавинообразному увеличению неудачных тестовых результатов.

Библиотеки модульного тестирования в .NET

На данный момент наиболее распространенными инструментами модульного тестирования платформы .NET являются библиотека NUnit и Microsoft Unit Testing Framework.

NUnit — открытая среда unit-тестирования приложений для .NET. Она была перенесена с языка Java (библиотека JUnit). Первые версии NUnit были написаны на J#, но затем весь код был переписан на C# с использованием таких новшеств .NET, как атрибуты.

Существуют также известные расширения оригинального пакета NUnit, большая часть из них также с открытым исходным кодом. NUnit.Forms дополняет NUnit средствами тестирования элементов пользовательского интерфейса Windows Forms. NUnit.ASP выполняет ту же задачу для элементов интерфейса в ASP.NET.

Пример модульного теста с использованием библиотеки NUnit приведен ниже:

 

using NUnit.Framework;

 

[TestFixture]

public class ExampleTestOfNUnit

{

[Test]

public void TestMultiplication()

{

Assert.AreEqual(4, 2 * 2, "Умножение");

}

}

 

Как видно из примера модульного теста NUnit, тестовый класс помечен атрибутом [TestFixture] который указывает, что в данном классе будут содержаться тестовые методы. Тестовые методы помечаются атрибутом [Test], а в средине тестового метода используется статический класс Assert с набором специальных методов, для сравнения результатов, возвращаемых тестируемым методом с необходимыми результатами.

Одним из недостатков библиотеки является то, что она не встроена в среду разработки Visual Studio.

Существует встроенный в среду разработки Visual Studio инструмент модульного тестирования – Microsoft Unit Testing Framework.