Condividi tramite


Utilizzo di classi Assert

Le classi Assert dello spazio dei nomi UnitTestingFramework permettono di verificare funzionalità specifiche. Un metodo di unit test verifica il codice di un metodo nel codice di sviluppo, ma segnala gli aspetti nel comportamento del codice soltanto se sono state incluse istruzioni Assert.

Nota

Con o senza le istruzioni Assert, gli unit test possono generare dati di code coverage. Per ulteriori informazioni, vedere Procedura: ottenere dati di code coverage.

Tipi di classi Assert

Lo spazio dei nomi Microsoft.VisualStudio.TestTools.UnitTesting fornisce vari tipi di classi Assert:

Assert

Nel metodo di test è possibile chiamare un numero qualsiasi di metodi della classe Assert, ad esempio Assert.AreEqual(). Nella classe Assert sono disponibili numerosi metodi tra cui scegliere e molti di questi metodi hanno vari overload.

CollectionAssert

La classe CollectionAssert permette di confrontare le raccolte di oggetti e di verificare lo stato di una o più raccolte.

StringAssert

Utilizzare la classe StringAssert per confrontare le stringhe. Questa classe contiene una varietà di metodi utili, come StringAssert.Contains, StringAssert.Matches e StringAssert.StartsWith.

AssertFailedException

L'eccezione AssertFailedException viene generata ogni volta che un test ha esito negativo. Un test ha esito negativo in caso di timeout, se viene generata un'eccezione o se contiene un'istruzione Assert che produce un risultato Non riuscito.

AssertInconclusiveException

L'eccezione AssertInconclusiveException viene generata ogni volta che un test produce un risultato Senza risultati. In genere un'istruzione Assert.Inconclusive viene aggiunta a un test su cui si sta ancora lavorando per indicare che non è ancora pronto per l'esecuzione.

Nota

Una strategia alternativa consiste nel contrassegnare con l'attributo Ignora un test che non è pronto per l'esecuzione. Vi è tuttavia uno svantaggio: non è semplice generare un report sul numero di test rimasti da implementare.

UnitTestAssertException

Se si scrive una nuova classe di eccezione Assert, ereditando tale classe dalla classe base UnitTestAssertException, viene semplificata l'identificazione dell'eccezione come errore di asserzione anziché come eccezione imprevista generata dal test o dal codice di produzione.

ExpectedExceptionAttribute

Decorare un metodo di test con l'attributo ExpectedExceptionAttribute quando si desidera che con il metodo di test venga verificato se un'eccezione che si prevede venga generata da un metodo nel codice di sviluppo non sia invece generata in tale metodo.

Overload di tipi non sicuri con Assert.AreEqual

Il metodo Assert.AreEqual ha molti overload che permettono di confrontare tipi di dati specifici. Tuttavia, il metodo Assert.AreEqual non ha un overload per tipi non sicuri, come tipi di dati puntatore.

Per illustrare ciò, creare un'applicazione console C# che contenga la classe seguente:

unsafe public class CUnsafeTest
{
    private int* m_pX = null;
    unsafe public void VoidPtr(void* voidPtr)
    {
    }
    unsafe public int* ReturnPointer(float* fPtr, TestThis* pTestThis)
    {
        int x = 5;
        return &x;
    }
}

Generare ora i test per la classe CunsafeTest. Il codice generato sarà simile all'esempio seguente:

[TestMethod()]
public void ReturnPointerTest()
{
    unsafe
    {
        CodeGen.BVT.Unsafe.CUnsafeTest target;
        target = new CodeGen.BVT.Unsafe.CUnsafeTest();
        //  TODO: Initialize to an appropriate value
        System.Single* fPtr = null;
        //  TODO: Initialize to an appropriate value
        TestThis* pTestThis = null;
        //  TODO: Initialize to an appropriate value
        System.Int32* expected = null;
        System.Int32* actual;
        actual = target.ReturnPointer(fPtr, pTestThis);
        Assert.AreEqual(actual, expected);
            // On the preceding line, no overload is available. 
    }
}

In questo caso si dovrebbe sostituire l'istruzione Assert.AreEqual con il codice di verifica personalizzato.

Vedere anche

Riferimenti

Microsoft.VisualStudio.TestTools.UnitTesting

Concetti

Creazione ed esecuzione di unit test per il codice esistente