Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Установить NUnit






Идем по ссылке https://sourceforge.net/projects/nunit/ и устанавливаем NUnit. Так же в VS устанавливаем NUnit Test Adapter (ну чтобы запускать тесты прямо в VS).

 

Создадим папочку типа Solution Folder Test и в нее добавим проект LessonProject.UnitTest и установим там NUnit:

Install-Package NUnit

Создадим класс UserControllerTest в (/Test/Default/UserContoller.cs):

[TestFixture]

public class UserControllerTest

{

}

Итак, принцип написания наименования методов тестов Method_Scenario_ExpectedBehavior:

· Method – метод [или свойство], который тестируем

· Scenario – сценарий, который мы тестируем

· ExpectedBehavior – ожидаемое поведение

Например, проверяем первое, что возвращаем View c классом UserView для регистрации:

public void Register_GetView_ItsOkViewModelIsUserView()

{

Console.WriteLine(" =====INIT======");

var controller = new UserController();

Console.WriteLine(" ======ACT======");

var result = controller.Register();

Console.WriteLine(" ====ASSERT=====");

Assert.IsInstanceOf< ViewResult> (result);

Assert.IsInstanceOf< UserView> (((ViewResult)result).Model);

}

Итак, все тесты делятся на 3 части Init-> Act-> Assert:

· Init – инициализация, мы получаем наш UserController

· Act – действие, мы запускаем наш controller.Register

· Assert – проверка, что всё действительно так.

Откроем вкладку Test Explorer:

Если адаптер NUnit правильно был установлен, то мы увидим наш тест-метод.

Запускаем. Тест пройден, можно идти открывать шампанское. Стоооп. Это лишь самая легкая часть, а как быть с той частью, где мы что-то сохраняем. В данном случае мы не имеем БД, наш Repositary – null, ноль, ничего.

Изучим теперь класс и методы для инициализации (документация):

· SetUpFixture – класс, помеченный этим атрибутом, означает, что в нем есть методы, которые проводят инициализацию перед тестами и зачистку после тестов. Это относится к одному и тому же пространству имен.

o Setup – метод, помеченный этим атрибутом, вызывается до выполнения всех тестовых методов. Если находится в классе с атрибутом TestFixture, то вызывается перед выполнением методов только этого класса.

o TearDown – метод, помеченный этим атрибутом, вызывается после выполнения всех тестов. Если находится в классе с атрибутом TestFixture, то вызывается после выполнения всех методов.

Создадим класс UnitTestSetupFixture.cs (/Setup/UnitTestSetupFixture.cs):

[SetUpFixture]

public class UnitTestSetupFixture

{

[SetUp]

public void Setup()

{

Console.WriteLine(" ===============");

Console.WriteLine(" =====START=====");

Console.WriteLine(" ===============");

}

 

[TearDown]

public void TearDown()

{

Console.WriteLine(" ===============");

Console.WriteLine(" =====BYE! ======");

Console.WriteLine(" ===============");

}

}

Запустим и получим:

===============

=====START=====

===============

=====INIT======

======ACT======

====ASSERT=====

 

===============

=====BYE! ======

===============

Mock

Итак, Mock – это объект-пародия. Т.е. например, не база данных, а что-то похожее на базу данных. Мираж, в общем-то. Есть еще Stub – это заглушка. Пример метода заглушки:

public int GetRandom()

{

return 4;

}

Но мы будем использовать Mock:

Install-Package Moq

Определим, какое окружение есть у нас, чтобы мы проинициализировали для него Mock-объекты. В принципе, это всё, что мы некогда вынесли в Ninject Kernel:

· IRepository

· IConfig

· IMapper

· IAuthentication

И тут я сделаю небольшое замечание. Мы не можем вынести Config в объекты-миражи. Не в плане, что это совсем невозможно, а в плане – что это плохая затея. Например, мы изменили шаблон письма так, что string.Format() выдает ошибку FormatException. А в тесте всё хорошо, тест отлично проходит. И за что он после этого отвечает? Ни за что. Так что файл конфигурации надо использовать оригинальный. Оставим это на потом.

По поводу, IMapper – в этом нет необходимости, мы совершенно спокойно можем использовать и CommonMapper.

Но для начала проинициазируем IKernel для работы в тестовом режиме. В App_Start/NinjectWebCommon.cs мы в методе RegisterServices указываем, как должны быть реализованы интерфейсы, и вызываем это в bootstrapper.Initialize(CreateKernel). В дальнейшем мы обращаемся по поводу получения сервиса через DependencyResolver.GetService(). Так что создадим NinjectDependencyResolver (/Tools/NinjectDependencyResolver.cs):

public class NinjectDependencyResolver: IDependencyResolver

{

private readonly IKernel _kernel;

 

public NinjectDependencyResolver(IKernel kernel)

{

_kernel = kernel;

}

 

public object GetService(Type serviceType)

{

return _kernel.TryGet(serviceType);

}

 

public IEnumerable< object> GetServices(Type serviceType)

{

try

{

return _kernel.GetAll(serviceType);

}

catch (Exception)

{

return new List< object> ();

}

}

}

Добавим в SetUp метод (/Setup/UnitTestSetupFixture.cs):

[SetUp]

public virtual void Setup()

{

InitKernel();

}

protected virtual IKernel InitKernel()

 

{

var kernel = new StandardKernel();

DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.