2013-04-04 7 views
39

Sto usando MSTest, e voglio impostare la stessa categoria di prova per tutti i metodi di classe di test in una sola volta, senza impostare l'attributo TestCategory a ciascun metodo singolarmente. Come si può fare?Come impostare categoria di prova per tutte le prove nella classe

Il modo più comodo e ovvia sarebbe quella di impostare l'attributo TestCategory sulla classe, ma può essere applicato a solo metodi.

L'obiettivo finale è quello di saltare i test di integrazione durante il test eseguito su TFS check-in.

+3

Interessante. Non pensare che sia possibile marcare tutti i metodi in classe con l'attributo che funziona con i test TFS. TFS comprende TestCategory e Priorità e questi attributi sono solo specifici del metodo. È possibile spostare i test di integrazione per separare il progetto e puntare a TFS per non eseguirlo. – nikita

+2

Potresti separare la tua unità e i test di integrazione in due diversi gruppi e quindi configurare la tua build di conseguenza? –

+0

Bene, abbiamo una dozzina di librerie e ognuna di esse ha una libreria di test corrispondente che può contenere sia test di unità che di integrazione. È possibile dividere ciascuno di essi in una libreria per unità e una libreria per il test di integrazione, ma non sembra l'approccio più elegante. – alex

risposta

2

Un modo per aggirare questa limitazione è quello di mettere la categoria di prova all'inizio di ogni metodo di prova. Ad esempio, il nome dell'unità test

public void UnitTestDoSomething_ExpectThis() 

e il test di integrazione

public void IntegrationTestDoSomething_ExpectThis() 

Poi, quando si esegue la query TFS per ottenere i test di integrazione si può fare

Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]

Anche se questa non è una soluzione perfetta, ti aiuterà a distinguere i tuoi test in codice e TFS. In alternativa, puoi guardare i percorsi di area e iterazione.

+0

Ma cosa fai con più categorie? – Dagrooms

2

È possibile raggruppare da "Nome classe" in Pannello di prova Explorer.

Con l'attributo TestCategory di prova non è possibile risolvere il problema solo perché gli attributi in C# sono metadati e non possono essere utilizzati come valori dinamici.

4

L'obiettivo finale è quello di saltare i test di integrazione durante il test eseguito su TFS del check-in.

Ci sono altri modi per farlo. Nelle build TFS, you can set which unit tests you want to run, depending on their assembly name.

Come comportamento predefinito, eseguirà tutti i test di unità in assiemi che hanno "test" nel loro nome. Una semplice soluzione sarebbe quella di rinominare i test di integrazione con qualcosa che non include "test".


Se si desidera utilizzare le categorie , si potrebbe provare a utilizzare AOP. Ad esempio, con Postsharp, è possibile creare un aspetto nell'assieme test di integrazione che puts the attribute on the method. Quindi abilitare l'aspetto per tutti i metodi pubblici nel proprio assembly di integrazione se tutti i test sono raggruppati in una DLL o in ogni classe di test di integrazione.

5

Ho cercato di fare qualcosa di simile, e sono arrivato ad una soluzione che funziona davvero bene per i miei scopi.

Ciò non non risolve il problema di applicare un TestCategory su una base per classe, ma è possibile utilizzare l'argomento della riga di /test: di comando per mstest per specificare una stringa di ricerca per adattarsi a qualsiasi parte del completamente qualificato nome del metodo del test. Ciò significa che puoi generalmente corrispondere alla classe, allo spazio dei nomi o alla stringa di ricerca che puoi raggiungere e che corrisponderà ai test di destinazione.E se ciò non avviene, puoi utilizzare l'argomento /test: più volte. Cioè:

> mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace 
    /test:My.FullyQualified.OtherNamespace.OtherClass 

More Info