Unit test di app Xamarin.iOS

Questo documento descrive come creare unit test per i progetti Xamarin.iOS. Gli unit test con Xamarin.iOS vengono eseguiti mediante il framework Touch.Unit, che include un test runner iOS e una versione modificata di NUnit denominata Touch.Unit, dotata di un set di API note che semplificano la creazione di unit test.

Configurazione di un progetto di test in Visual Studio per Mac

Per configurare un framework di testing unità per il progetto, è sufficiente aggiungere alla propria soluzione un progetto di tipo Progetto di unit test iOS. A tale scopo, fare clic con il pulsante destro del mouse sulla soluzione e scegliere Aggiungi > nuovo progetto. Nell'elenco selezionare iOS > Tests > Unified API > iOS Unit Tests Project (È possibile scegliere C# o F#).

Scegliere C# o F#

L'esempio riportato sopra crea un progetto di base che contiene un programma runner di base e che fa riferimento al nuovo assembly MonoTouch.NUnitLite. Il progetto avrà un aspetto simile al seguente:

Progetto in Esplora soluzioni

La classe AppDelegate.cs contiene il test runner e ha un aspetto simile al seguente:

[Register ("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
    UIWindow window;
    TouchRunner runner;

    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        // create a new window instance based on the screen size
        window = new UIWindow (UIScreen.MainScreen.Bounds);
        runner = new TouchRunner (window);

        // register every tests included in the main application/assembly
        runner.Add (System.Reflection.Assembly.GetExecutingAssembly ());

        window.RootViewController = new UINavigationController (runner.GetViewController ());

        // make the window visible
        window.MakeKeyAndVisible ();

        return true;
    }
}

Nota

Il tipo di progetto di unit test iOS non è disponibile in Visual Studio 2019 o Visual Studio 2017 su Windows.

Scrittura di alcuni test

Ora che la shell di base è configurata, è possibile scrivere i primi set di test.

I test vengono scritti creando classi a cui è applicato l'attributo [TestFixture]. All'interno di ogni classe TestFixture occorre applicare l'attributo [Test] a ogni metodo che deve essere richiamato dal test runner. Le fixture di test effettive possono essere incluse in qualsiasi file del progetto di test.

Per iniziare rapidamente, selezionare Aggiungi/Aggiungi nuovo file, quindi nel gruppo Xamarin.iOS selezionare UnitTests. Verrà aggiunto un file scheletro che contiene un test superato, un test non superato e un test ignorato, come nell'esempio seguente:

using System;
using NUnit.Framework;

namespace Fixtures {

    [TestFixture]
    public class Tests {

        [Test]
        public void Pass ()
        {
                Assert.True (true);
        }

        [Test]
        public void Fail ()
        {
                Assert.False (true);
        }

        [Test]
        [Ignore ("another time")]
        public void Ignore ()
        {
                Assert.True (false);
        }
    }
}

Esecuzione dei test

Per eseguire questo progetto all'interno della soluzione, fare clic su di esso con il pulsante destro del mouse e scegliere Debug Item (Esegui debug elemento) o Run Item (Esegui elemento).

Il test runner consente di vedere quali test sono registrati e di selezionare singolarmente i test che possono essere eseguiti.

Elenco dei test registratiUn singolo test

Risultati dell'esecuzione

È possibile eseguire singole fixture di test selezionandone una dalle visualizzazioni annidate oppure eseguire tutti i test scegliendo "Run Everything" (Esegui tutto). Se si esegue il test predefinito, che dovrebbe includere un test superato, un test non superato e un test ignorato, il report ha un aspetto simile al seguente ed è possibile eseguire il drill-down direttamente al test non superato e trovare maggiori informazioni sull'errore:

Screenshot che mostra un report di esempio, schermata Test Runner. Screenshot che mostra un report di esempio, schermata Test. Screenshot che mostra un report di esempio, schermata Test con stato del test.

Si può anche consultare la finestra Output applicazione nell'IDE per verificare quali test sono in esecuzione e qual è il loro stato corrente.

Scrittura di nuovi test

NUnitLite è una versione modificata del progetto NUnit denominato Touch.Unit. È un framework di testing leggero per .NET, basato sulle idee contenute in NUnit, di cui fornisce un sottoinsieme di funzionalità. Usa una quantità minima di risorse e può essere eseguito su piattaforme con limitazioni di risorse come quelle usate per lo sviluppo per sistemi operativi Mobile ed Embedded. L'API NUnitLite disponibile in Xamarin.iOS. Con lo scheletro di base fornito dal modello di unit test, il punto di ingresso principale è costituito dai metodi della classe Assert.

Oltre a questi metodi, la funzionalità di testing unità è suddivisa negli spazi dei nomi seguenti che fanno parte di NUnitLite: