- •Java и c# технологии прикладного програмирования
- •Java и c# технологии прикладного програмирования
- •Содержание
- •Введение
- •Лабораторная работа № 1 Коллекции c#
- •Цель работы
- •Теоретические сведения
- •Общие сведения о платформе .Net
- •Общие сведения о коллекциях c#
- •Обобщенные коллекции с#
- •Порядок выполнения лабораторной работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Получение информации о типе
- •Экземпляр типа Type
- •Получение экземпляра типа Type
- •Динамическая загрузка сборок
- •Динамическая загрузка типов
- •Исследование типа
- •Характеристики типа как целого
- •Члены класса
- •Динамическое создание объекта и вызов методов
- •Создание объекта по его типу
- •Динамический вызов методов
- •Использование интерфейсов
- •Позднее связывание
- •Динамическое приведение типов
- •Новые механизмы абстракции
- •Динамическое создание типов
- •Динамическое создание программного кода
- •Динамическое создание класса
- •Динамическое создание перечислений
- •Динамический "Hello World!"
- •Динамическое разворачивание циклов
- •Атрибуты
- •Атрибут это класс
- •Декларативное программирование
- •Код, выполняемый во время разработки
- •Использование атрибутов
- •Использование встроенных атрибутов
- •Определение и использование пользовательских атрибутов
- •Пример декларативного программирования
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Связный уровень взаимодействия ado.Net
- •Несвязный уровень взаимодействия ado.Net
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Связи между объектами в FluentNHibernate
- •Связь один к одному
- •Связь один ко многим
- •Связь многие ко многим
- •Способы выборки объектов в FluentNHibernate
- •Запросы NativeSql
- •Запросы по критерию
- •Запросы по образцу
- •Запросы hql
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Компиляция страниц по требованию
- •Страница asp.Net 2.0
- •Директива @Page
- •Жизненный цикл страницы
- •Новые свойства и методы объекта Page
- •Управление страницей
- •Установка выделения на элемент управления
- •Обновление данных без перезагрузки страницы
- •Отправка данных формы другой странице asp.Net
- •Шаблоны дизайна страниц
- •Создание шаблона дизайна
- •Создание страницы
- •Обработка шаблонов средой asp.Net
- •Использование разных шаблонов для разных браузеров
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Библиотеки модульного тестирования в .Net
- •Unit Testing Framework от Microsoft
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Содержание отчета
- •Контрольные вопросы
- •Рекомендованная литература
Библиотеки модульного тестирования в .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.
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 |
Проверяет, чтобы передаваемый объект не являлся экземпляром заданного класса. Ошибка возникает, если объект является экземпляром заданного класса. |