Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 297

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 291 292 293 294 295 296 < 297 > 298 299 300 301 302 303 .. 404 >> Следующая


В определении атрибута были использованы и его свойства — AiiowMultiple и inherited. Эти свойства также будут обсуиедаться более подробно в настоящем разделе ниже.

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

[TestCase (typeof(TeatAnObject))] public class SomeCodeOrOther t .

public SomeCodeOrOther () -

С )

public int Do 0 (

return ЭЭ9 ;

)

1

Для этого класса в качестве префикса используется атрибут TestCase, а далее применяется функция typeof о для описания класса, который будет использоваться для тестирования рассматриваемого кода. В данном примере не хватает класса,
634 Глава 22

осуществляющего тестирование. Ниже приводится объект, используемый для про-перки экземпляра кода, который подвергается тестированию:

public class TestAnObject

<

public TestAnObject О {

// Проверка тестируемого класса

SomeCodeOrOther scooby - new SomeCodeOrOther 0 ;

if (scooby.Do () Г* 999)

throw new Exception ('Pesky Kids') j

}

J

Данный класс просто создает экземпляр тестируемого класса, вызывает метод и генерирует исключительную ситуацию, если возвращенное значение отличается от ожидаемого. Более развернутый вариант тестирования мог бы осуществлять проверку тестируемого объекта более полно, вызывая все методы, которыми обладает данный класс, передавая нм значения, выходящие за пределы допустимого для проверки условий возникновения ошибок, и, возможно, создавая какие-либо другие классы в зависимости от текущей информации; например, если тестируемый класс осуществляет доступ к базе данных, то вы, возможно, захотите передать ему в качестве объекта соединение с базой данных.

Перейдем к основному коду. Этот класс в цикле просматривает все типы, определенные в модуле, пытаясь обнаружить те их них, где есть описание атрибута TestCaseAttribute. В случае обнаружения такого описания атрибут изилекается, и вызывается метод Teat о:

using System;

using System.Reflection;

[AttributeUsage(AttributeTargets.Class,AllowMultiple=false,Inherited= true)! public class TestCaseAttribute : Attribute

II Код, пропущенный для краткости

)

III <summary>

III Класс, в котором используется атрибут TestCase

III </summary>

[TestCaseAttribute(typsof(TestAnObject))I public class SomeCodeOrOther

11 Код, пропущенный для краткости

)

11 Основной класс программы public class UnitTeeting ( )

I

public static void MainU

(

II Поиск всех классов, а которых содержатся варианты тестирования ! i 1 данно! «одуле

Assembly a » Assembly .GetExecutinjjAesembly () ;

// Проход в цикле по веек типам, описанным а модуле, и их тестирование //в случав необходимости -

System.lypet] types =¦ a.GetExportediypes I) j
Атрибуты

635

foreach (System.Type t in types)

<

!I Вывод имени типа____

Console.WriteLine ("Checking type {0}* , t.Tofitring ()) ;

it Включает ли данный тип нестандартный атрибут TestcaseAttribute? objectU atts = t.GetCustomAttributes(typeof(TestcaseAttribute),

false) ;

If (1 *= atts.Length)

(

Console.WriteLine |+ Found TestcaseAttribute: Running Testa') ;

- 11 OK, данный класс обладает вариантом тестирования. Запускаем его...

TestcaseAttribute tee = atts[0] аз TestcaseAttribute;

try

t

У! Осуществляем тестирование... tea.Test О ;

Cons оle.Hri teLine (' PASSEDI *);

} •

- catch (Exception ex)

(

' Console.WriteLine (' FAILEDI*);

Console.WriteLine (ex.ToString ()}j

>

> ,

) .

)

Новый участок кода выделен серым цветом. В начале работы программа получает ВЫПОЛНЯЮЩИЙСЯ модуль посредством статического метода GetExecut ir.g Assembly () класса Assembly. Далее вызывается метод GetExportedTypes для определения всех типов объектов, которые являются общедоступными в данном модуле.

Для каждого экспортируемого в данный модуль типа проверяется наличие в нем атрибута TestCase. Если такой атрибут существует, он извлекается (прн этом внутри него создается экземпляр атрибута путем передачи параметров, которые внутри кода передаются конструктору объекта) и происходит вызов метода Test о, который и производит тестирование кода.

Если эту программу запустить, то будет выведено следующее:

Checking type TestCaseAttrubute

(Проверка типа TestCaseAttrubute)

Checking type SomeCodeOrOther (Проверка типа SomeCodeOrOther)

Found TestCaseAttrubute: Running Tests (Обнаружен TestCaseAttrubute: Запуск тестирования)

PASSED1

(Тесты пройдены!)

Checking type TestAnObjecl (Проверка типа TestAnObject)

Checking type UnitTesting (Проверка типа TestCaseAttrubute)
636 Глава 22

Атрибут System.AttributeUsageAttribute

При определении классов нестандартных атрибутов необходимо определять также тип (типы), где данный атрибут может быть использован. В предыдущем примере использование атрибута TestCase был определено только для классов. Для того чтобы определить, где использование данного атрибута является допустимым, следует воспользоваться еще одним атрибутом — Attributeueage.
Предыдущая << 1 .. 291 292 293 294 295 296 < 297 > 298 299 300 301 302 303 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.