Звено тестване в Visual Studio използване NUnit и nsubstitute

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


защото Тази книга е написана за по същество C # програмисти, именно защото бе последвано от избор на библиотеките NUnit, NSubstitute. същото се оставя непроменен именуване система.

Така че, може би това ще започне. Аз ще ви кажа как да се създаде Visual Studio да пишат тестове, както и 3 примера. Първият - в тази статия е просто и скалъпен да даде основата. Във втората част ще бъде сравнително прост пример, не забравяйте, как тестовете, обхванати за първи път. В третата част на статията е пример за по-сложно и ми ще да пишат паралелно код. За да стане ясно, че не богове горят саксии.
На първо място, трябва да инсталирате NUnit. но да се започне е разположен в VisualStudio - NuGet. Това разширение ви позволява да инсталирате пакети в една команда от конзолата.
Open Visual Studio. и изберете Инструменти | Разширенията и актуализации (преди това е бил Extension Manager)


Можете също да инсталирате NUnit Тест адаптер - интеграционни тестове работят в студиото (макар че аз използвам Resharper така че аз не особено искат.)
Макар че аз не препоръчваме да инсталирате Unit Test Generator. Четох за проблема в прегледа, но не обръщат внимание. След инсталацията - престава да работи преход в клас / метод за изпълнение на Ctrl + Click. Проблемът изчезна веднага след отстраняването на тапа.
Така че сега ние имаме NuGet. но ние се нуждаем NUnit (аз ще използвам тази рамка, вместо вградения Visual Studio), заедно с NSubstitute.
Ние създаваме тестов проект конзола и го наречете SampleProject. Поставих марката срещу Създаване указателя за решение. до папката с тестовете за проекта не са били инвестирани в самия проект, а е на същото ниво.

Сега се създаде проект, който съдържа единица тестове за нашия проект

Предписва име на проекта

Забележете, че на мястото, аз отидох до по-високо ниво, който първоначално е бил препоръчаха ми да създадете елемент с проект тестове вътре в папка с проекта.
Както написах по-горе, име конвенция ще бъде взето от книгата Изкуството на Звено тестване. За да назовем само тестове на проекта е следната - <Тестируемый проект>.UnitTests. По този начин ние сме един проект с тестовете ще бъдат призовани SampleProject.UnitTests
След създаването SampleProject.UnitTests проект - отваряне на файл, създаден UntTest1.cs

Както виждаме сега използва вграден рамка VisualStudio тестване. Това може да бъде разбрано по атрибути - клас [Тест]. в метод [TestMetod]. Ние искаме да използваме NUnit които вместо тези други атрибути [TestFixture] и [Test] съответно. Нека се опитаме да се промени, но те са подчертани в червено, защото докато VisualStudio за тях не се знае нищо.

Отворете конзолата NuGet

И получи команда
Инсталирайте Пакет NUnit
и след това
Инсталирайте Пакет NSubstitute
ВАЖНО: Не забравяйте да изберете проекта по подразбиране като вашия проект с единица тестове, а не с програмата. В противен случай, библиотеката ще бъде настроен на грешната проекта.

Добави в UnitTest1 -
използване NUnit.Framework;
и ние виждаме, че компилаторът сега смятат, че нашите качества, като се използват стари могат да бъдат отстранени (използвайки Microsoft.VisualStudio.TestTools.UnitTesting)
Надявам се да прочетете книгата Изкуството на Звено тестване, или просто нямате представа как се работи в общи линии с NUnit. защото дълбоко основание не планирам да се обясни малко по-формат статия.
Ако сме наистина кратък - най-важното в единица тест - това е декларация за истинността на предположението (отстояват).
Ще създаде в главната папка на проекта SampleProject Utilites и да се създаде там IAccount интерфейс (папка е създадена за визуално разделяне на класове и не е задължително)
Първоначално се обадих метод GetAccountId_InititalizedObject_ReturnCorrectId. след това преименувана
GetAccountId_WasInitializedWithId_ReturnSameId
Започваме да създаде код за профила
Сметка сметка = нов профил ();
и да видим грешката, нашите тестове единични проекта е все още знаят за проекта за изпитване
добре, че е необходимо да се добави препратка към оригиналния SampleProject. повикване разговор

И ние избираме нашия проект

След това добавете AccountTests на класа, използващи SampleProject.Utilites; и започва да компилирате кода
добавя кода, трябва да получите нещо подобно
В момента тече теста (пускам с помощта на runner'a Resharper., Но има безплатно решение, същата NUnit Тест адаптер., Който работи по този начин :)

и ние виждаме, че тя преминава

Какъв е теста? Ние създаваме обект Сметка. инициализиране на номера му. и след това Assert.AreEqual команда (account.GetAccountId (), initId); Ние се провери дали GetAccountId () метод се връща на същата стойност, която е най-инициализация.
Ако искате да видите как тестът е неуспешен, промяна на линия, за да се провери за
Assert.AreEqual (account.GetAccountId (), 0);
един
Assert.AreNotEqual (account.GetAccountId (), initId);
По принцип на работа, въпреки че е твърде проста и пресилено. Аз питам малко търпение.
Нека да се справят с това, какво по NSubstitute
Най-трудната част е може би в единица тестване "д - е да се работи с обекти, които не са тествани. Представете си, че в метод GetAccountId (), за да всъщност изпълнява стотици реда код, плати на мрежата за достъп до базата данни, и подобни неща. Не е най-весело перспективата за всичко, разнасящ в UnitTest'ah. да бъде лек и бърз, така че, в идеалния случай, най-малко на всеки компилация от техния план и да се уверите, че кодът не е счупена, както е изменен. Позоваването на мрежова файлова система -
а) изискват конфигурация
б) могат да заемат значителна време
в) по същество са интеграционни тестове, които също са важни, но сега не е за тях.
Какво е решението - разбира се лъжа и да се замени всичко, което се намира извън нашия контрол) Създаване на фалшив. Тъп. Мъниче обекти. Обектите, които реализират интерфейса, но в действителност това, което е казал.