Test di un metodo C# con NUnit

In questo articolo illustrerò come eseguire dei test su un metodo con NUnit.

Il metodo è scritto in linguaggio C#, ma il procedimento non cambia se abbiamo dei metodi scritti in Visual Basic.

Prima di tutto occorre scaricare NUnit da http://www.nunit.org/ .

Creiamo un nuovo progetto con Visual Studio e aggiungiamo una classe.

Io ho scritto la seguente:

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace TestConNunit
{
    public class MyClass
    {
 
        public static  int MioMetodo(int num1,int num2) 
        {
            if (num1 == num2) 
                return 0;
            return num1 * num2;
        }
    }
}

NOTA: Il blocco if ha il compito di introdurre un bug nel mio "complesso" metodo.

I passi da eseguire sono i seguenti:

  • Aggiungere un nuovo progetto Class Library "NomeProgettoTest";
  • Copiare la acartella \bin\net-2.0 nella stessa cartella del progetto di test;
  • Al nuovo progetto aggiungere il riferimento a nunit.framework.dll (si trova nella cartella \bin\net-2.0);
  • Al nuovo progetto aggiungere il riferimento al progetto contenente la classe e/o i metodi da testare;
  • Nella classe del nuovo progetto includere il namespace "using Nunit.Framework;" e incollare il seguente codice:
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using TestConNunit;
 
namespace TestConNUnit.Test
{
 
    [TestFixture]
    public class Class1
    {
        [Test]
        public void MioMetodoTest()
        {
            int expected = 12;
            int actual = MyClass.MioMetodo(3, 4);
            Assert.AreEqual(expected, actual);
        }
 
        [Test]
        public void MioMetodoTest2()
        {
            int expected = 9;
            int actual = MyClass.MioMetodo(3, 3);
            Assert.AreEqual(expected, actual, "Questo test deve fallire... vedi definizione di 'MioMetodo' ;-)");
        }
    }
}
  • Lanciare l'eseguibile nunit-x86.exe e cliccare su File->Open Project;
  • selezionare la dll nomeprogettoTest.dll.

Ora è possibile avviare i test.

NOTA: i metodi di test devono essere publici e ritornare un void!

Sicuramente vi starete chiedendo cosa rappresenta il codice sopra riportato.

L'attributo [TestFixture] indica una classe di test mentre [Test] indica, appunto, un test.

Esistono altri attributi che ci permettono di preparare l'ambiente di test e altri di ripristinarlo: pensiamo al test di un metodo che scrive un certo file su disco; come lo faccio a testarlo?

  1. Preparo l'ambiente di test -> se il file esiste, devo eliminarlo (o magari crearne una copia di backup);
  2. avvio il metodo di test;
  3. ripristino l'ambiente di test -> se ho creato la copia di backup del file, potrei avere la necessità di ripristinare la vecchia versione (alla fine dei test o alla fine di ogni test?).

Gli attributi [TestFixtureSetUp], [TestFixtureTearDown], [SetUp], [TearDown] permettono di decorare metodi che rispettivamente vengono eseguiti appena parte il primo metodo di test, quando termineranno tutti i metodi di test, quando qualsiasi metodo di test viene eseguito, alla conclusione di ogni metodo di test.

Il metodo Assert.AreEqual definisce il criterio di successo (o insuccesso) di un test.

Osservazione banale: la cartella /doc/ di NUnit contiene una documentazione sicuramente molto più esauriente di questo articolo.