Как да работя с xUnit.Net framework

Използвам xUnit от доста време и това е избраната от мен рамка за тестване на модули. Това е инструмент за тестване на модули с отворен код за .Net framework, който е съвместим с ReSharper, CodeRush, TestDriven.Net и Xamarin. Можете да се възползвате от xUnit.Net, за да утвърдите лесно тип изключение. Също така, можете да разширите атрибутите Fact или Theory в xUnit.Net и той предоставя отлична поддръжка за писане на параметризирани модулни тестове. Ето връзката към хранилището на Github за xUnit.Net.

Ето как да работите с xUnit.net в Visual Studio. За тази демонстрация ще използваме Visual Studio 2015, въпреки че можете да работите и с други съвместими версии на Visual Studio. Сега следвайте тези прости стъпки, за да настроите средата си за работа с xUnit.Net във Visual Studio.

  1. Отворете Visual Studio 2015 UDE
  2. Създайте нов проект от типа „Библиотека на класовете“
  3. Запазете проекта с име
  4. След това инсталирайте xUnit.Net чрез NuGet Package Manager

И това е! За да стартирате модулните тестове в Visual Studio IDE, можете да използвате xUnit.net runner за Visual Studio. Ето какво трябва да посочите, за да инсталирате пакета xUnit.net [Runner: Visual Studio], като използвате прозореца на конзолата на Package Manager:

Install-Package xunit.runner.visualstudio -Version 2.1.0

Това е всичко, от което се нуждаете, за да настроите средата си, така че да можете да изпълнявате модулните тестове xUnit.Net от Visual Studio IDE.

Факти и теории

Противно на популярния атрибут [Test], с който може би сте запознати, ще трябва да използвате атрибута [Fact], за да напишете методите за единични тестове с помощта на xUnit.net. Имайте предвид, че xUnit.net поддържа два вида единични тестове: факти и теории.

Докато фактите се използват за тестване на инвариантни условия, теориите са тестове, които са верни за определен набор от данни, предадени като аргумент на метода. Обикновено бихте използвали атрибута [Fact], за да напишете модулни тестове, които нямат аргументи на метода.

Атрибутът [Theory] обаче се нуждае от един или повече екземпляра DataAttribute, които да бъдат предадени като аргументи на метода. По същество бихте искали да използвате атрибут [Theory] за писане на модулни тестове, управлявани от данни. Единичните тестове, управлявани от данни, са тези, които се изпълняват върху различни набори от данни.

Ако приемем, че xUnit.Net и неговият бегач за Visual Studio са инсталирани, нека първо напишем прост единичен тест, използвайки атрибута [Fact]. Обмислете следния метод за единичен тест - тук ще се възползваме от атрибута [Fact].

[Fact]

 public void CheckEqualityTest()

  {

     Assert.Equal(10, Sum(5, 5));

  }

Методът Sum приема две цели числа и връща сумата от тях.

  private int Sum(int x, int y)

  {

    return x + y;

  }

Когато стартирате този тест, модулният тест преминава - можете да видите това в Test Explorer Windows във вашата Visual Studio IDE. Нека сега проучим как можем да работим с теории за изпълнение на модулни тестове, които се управляват от данни.

Следният кодов фрагмент илюстрира как можете да работите с модулни тестове, управлявани от данни, използвайки xUnit.Net.

[Theory, InlineData("This is a data driven test", "data")]

 public void CheckInputTest(string input, string substring)

 {

      Assert.Equal(true, input.Contains(substring));

 }

Обърнете се към кодовия фрагмент, даден по-горе. Обърнете внимание на използването на атрибута [Теория]. Освен ако вашите модулни тестове не се управляват от данни, трябва да изберете атрибута [Fact] във вашите методи за единично тестване. Обърнете внимание как са предадени параметри в метода за тестване на единица данни, наречен CheckInput. Атрибутът InlineData предоставя данните за изходния код. В този пример данните се предават на метода за единично тестване чрез вградени стойности. Можете да имате и множество атрибути InlineData - просто трябва да ги разделите с помощта на запетая. Ето как можете да постигнете това.

[Theory, InlineData("This is a data driven test", "data"),

            InlineData("This is another set of data for the data driven test", "data")]

        public void CheckInputTest(string input, string substring)

        {

            Assert.Equal(true, input.Contains(substring));

        }

Когато изпълните горния тест, управляван от данни, методът CheckInputTest ще бъде изпълнен два пъти - веднъж за всеки набор от входни данни.