Come lavorare con il framework xUnit.Net

Uso xUnit da un po 'di tempo ormai, ed è il mio framework di unit test preferito. È uno strumento di unit test open source per .Net framework compatibile con ReSharper, CodeRush, TestDriven.Net e Xamarin. È possibile sfruttare xUnit.Net per affermare facilmente un tipo di eccezione. Inoltre, puoi estendere gli attributi Fact o Theory in xUnit.Net e fornisce un supporto eccellente per la scrittura di unit test parametrizzati. Ecco il collegamento al repository Github per xUnit.Net.

Ecco come lavorare con xUnit.net in Visual Studio. Per questa dimostrazione utilizzeremo Visual Studio 2015, sebbene sia possibile lavorare anche con altre versioni compatibili di Visual Studio. Ora segui questi semplici passaggi per configurare il tuo ambiente per lavorare con xUnit.Net in Visual Studio.

  1. Apri Visual Studio 2015 UDE
  2. Crea un nuovo progetto di tipo "Libreria di classi"
  3. Salva il progetto con un nome
  4. Successivamente, installa xUnit.Net tramite NuGet Package Manager

E questo è tutto! Per eseguire gli unit test all'interno dell'IDE di Visual Studio, puoi usare xUnit.net runner per Visual Studio. Ecco cosa devi specificare per installare il pacchetto xUnit.net [Runner: Visual Studio] utilizzando la finestra della console di Gestione pacchetti:

Install-Package xunit.runner.visualstudio -Version 2.1.0

Questo è tutto ciò di cui hai bisogno per configurare il tuo ambiente in modo da poter eseguire gli unit test xUnit.Net dall'IDE di Visual Studio.

Fatti e teorie

Contrariamente al popolare attributo [Test] con cui potresti avere familiarità, dovresti usare l'attributo [Fact] per scrivere i tuoi metodi di unit test usando xUnit.net. Nota che xUnit.net supporta due tipi di unit test: fatti e teorie.

Mentre i fatti sono usati per testare condizioni invarianti, le teorie sono test che sono veri per un particolare insieme di dati passati come argomento al metodo. In genere si utilizza l'attributo [Fact] per scrivere unit test che non hanno argomenti di metodo.

Tuttavia, l'attributo [Theory] richiede che una o più istanze di DataAttribute vengano passate come argomenti del metodo. In sostanza, dovresti utilizzare l'attributo [Theory] per scrivere unit test basati sui dati. Gli unit test basati sui dati sono quelli che vengono eseguiti su diversi set di dati.

Supponendo che xUnit.Net e il suo runner per Visual Studio siano installati, scriviamo prima un semplice unit test usando l'attributo [Fact]. Considera il seguente metodo di unit test: qui trarremo vantaggio dall'attributo [Fact].

[Fact]

 public void CheckEqualityTest()

  {

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

  }

Il metodo Sum accetta due numeri interi e ne restituisce la somma.

  private int Sum(int x, int y)

  {

    return x + y;

  }

Quando esegui questo test, lo unit test viene superato: puoi vederlo in Esplora test di Windows nel tuo IDE di Visual Studio. Esaminiamo ora come possiamo lavorare con le teorie per eseguire unit test basati sui dati.

Il frammento di codice seguente illustra come lavorare con gli unit test basati sui dati usando xUnit.Net.

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

 public void CheckInputTest(string input, string substring)

 {

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

 }

Fare riferimento allo snippet di codice riportato sopra. Notare l'utilizzo dell'attributo [Theory]. A meno che i tuoi unit test non siano basati sui dati, dovresti optare per l'attributo [Fact] nei tuoi metodi di unit test. Notare come i parametri sono stati passati nel metodo di unit test basato sui dati denominato CheckInput. L'attributo InlineData fornisce i dati del codice sorgente. In questo esempio, i dati vengono passati al metodo di unit test tramite valori inline. Puoi anche avere più attributi InlineData: devi solo separarli usando una virgola. Ecco come puoi ottenerlo.

[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));

        }

Quando si esegue il test basato sui dati di cui sopra, il metodo CheckInputTest verrà eseguito due volte, una per ogni set di dati di input.