Utilizzo di classi Assert
Aggiornamento: novembre 2007
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:
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.
La classe CollectionAssert permette di confrontare le raccolte di oggetti e di verificare lo stato di una o più raccolte.
Utilizzare la classe StringAssert per confrontare le stringhe. Questa classe contiene una varietà di metodi utili, come StringAssert.Contains, StringAssert.Matches e StringAssert.StartsWith.
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.
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. |
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.
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. Per ulteriori informazioni, vedere Procedura: generare unit test. 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.