Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы Java и C# технологии.doc
Скачиваний:
171
Добавлен:
01.03.2016
Размер:
3.04 Mб
Скачать
      1. Библиотеки модульного тестирования в .Net

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

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 с набором специальных методов, для сравнения результатов, возвращаемых тестируемым методом с необходимыми результатами.

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

Существует встроенный в среду разработки VisualStudioинструмент модульного тестирования –MicrosoftUnitTestingFramework.

      1. Unit Testing Framework от Microsoft

Visual Studio Unit Testing Framework – инструмент модульного тестирования для платформы .NET, встроенный в среду разработки Visual Studio 2005 и выше. Чтобы определить, что класс является тестирующим, необходимо пометить его атрибутом [TestClass]. Если класс помечен этим атрибутом, то он может содержать в себе тестовые методы. Обычно тестирующий класс называют так же, как и тестируемый, только с префиксомTest.

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

Кроме тестирующих методов в тестирующем классе могут быть методы инициализации и очистки. Метод инициализации помечается атрибутом [TestInitialize] и позволяет инициализировать необходимые переменные перед выполнением метода-теста. Метод очистки помечается атрибутом [TestCleanup] и позволяет очистить результаты выполнения теста, например, очистить файл, удалить лишние записи с базы данных, присвоить переменным значения по умолчанию.

Кроме методов инициализации и очистки на уровне теста, в тестирующем классе могут присутствовать методы инициализации и очистки уровня класса. Эти методы вызываются один раз. Методы инициализации уровня класса вызывается один раз перед вызовом первого теста, а метод очистки уровня класса вызывается после выполнения последнего теста. Метод инициализации уровня класса помечается атрибутом [ClassInitialize], а метод очистки уровня класса помечается атрибутом[ClassCleanup]. Ниже приведен пример тестового класса.

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Test

{

[TestClass]

public class TestClass

{

public TestClass(){}

//Тестовый контекст

private TestContext testContextInstance;

public TestContext getTestContext(){

return testContextInstance;

}

public void setTestContext(TestContext testContext){

this.testContextInstance = testContextInstance;

}

[ClassInitialize]

public static void TestClassInitialize(TestContext testContext) {

/*Код будет выполняться до вызова первого теста*/

}

[ClassCleanup]

public static void TestCClassCleanup(){

/*Код будет выполняться после вызова последнего теста*/

}

[TestInitialize]

public void TestInitialize(){

/*Код будет выполняться перед выполнением каждого теста*/

}

[TestCleanup]

public void TestCleanup(){

/*Код будет выполняться после выполнением каждого теста*/

}

[TestMethod]

public void TestMethod(){

/*Код теста*/

}

}

}

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

Список всех методов класса Assert приведен в таблице 6.1.

Таблица 6.1 – Методы класса Assert для тестирования

Название метода

Описание

Assert.AreEqual

Проверяет, равны ли заданные значения. Ошибка возникает, если значения неравны.

Assert.AreNotEqual

Проверяет, чтобы заданные значения небыли равны. Ошибка возникает если значения, если значения равны.

Assert.AreSame

Проверяет, указывают ли ссылки на один и тот же объект. Ошибка возникает, если ссылки указывают на разные объекты.

Assert.AreNotSame

Проверяет, чтобы ссылки не указывали на один и тот же объект. Ошибка возникает, если ссылки указывают на один и тот же объект.

Assert.Fail

Ошибка возникает без каких-либо проверок.

Assert.IsTrue

Проверяет, является ли передаваемое значение истинным. Ошибка возникает если значение ложно.

Assert.IsFalse

Проверяет, является ли передаваемое значение ложным. Ошибка возникает если значение истинно.

Assert.IsNull

Проверяет, является ли передаваемое значение null. Ошибка возникает, если значение неnull.

Assert.IsNotNull

Проверяет, чтобы передаваемое значение не было null. Ошибка возникает, если передаваемое значениеnull.

Assert.IsInstanceOfType

Проверяет, является ли передаваемый объект экземпляром заданного класса. Ошибка возникает, если значение не является экземпляром заданного типа.

Assert.IsNotInstanceOfType

Проверяет, чтобы передаваемый объект не являлся экземпляром заданного класса. Ошибка возникает, если объект является экземпляром заданного класса.