webentwicklung-frage-antwort-db.com.de

Festlegen der Testkategorie für alle Tests in der Klasse

Ich verwende MSTest und möchte die gleiche Testkategorie für alle Methoden in der Testklasse gleichzeitig festlegen, ohne das TestCategory-Attribut für jede Methode einzeln festzulegen. Wie kann das gemacht werden?

Das bequemste und naheliegendste Verfahren wäre das Festlegen des TestCategory-Attributs für die Klasse. Es kann jedoch nur auf Methoden angewendet werden.

Das ultimative Ziel ist es, Integrationstests während des Testlaufs beim TFS-Check-In zu überspringen.

41
alex

Ich habe nach etwas Ähnlichem gesucht und bin zu einer Lösung gekommen, die für meine Zwecke wirklich gut funktioniert. 

Dies löst not das Problem der Anwendung einer TestCategory auf Klassenbasis, , aber mit können Sie das /test:-Befehlszeilenargument für mstest verwenden, um eine Suchzeichenfolge anzugeben, die mit einem beliebigen Teil des _ übereinstimmt.vollständig qualifiziert Methodenname des Tests. Das bedeutet, dass Sie in der Regel mit der Klasse, dem Namespace oder der Suchzeichenfolge übereinstimmen können, an der Sie ankommen und die Zieltests entsprechen. Wenn dies nicht der Fall ist, können Sie das Argument /test: mehrmals verwenden. I.e:

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

Mehr Info

Bearbeiten:

Das Hinzufügen des TestCategory-Attributs auf Klassenebene ist jetzt mit MSTest V2 verfügbar, wie in der untenstehenden Antwort von NomadeNumerique beschrieben. Einzelheiten

5
jdmcnair

Um das [TestCategory]-Attribut auf der Ebene class festlegen zu können, installieren Sie das TestFramework „MSTest V2“ mit NuGet.

Ref: https://blogs.msdn.Microsoft.com/devops/2016/06/17/taking-the-mstest-framework-forward-with-mstest-v2/

4
NomadeNumerique

Das ultimative Ziel ist es, Integrationstests während des Testlaufs auf TFS zu überspringen Check-In.

Es gibt andere Möglichkeiten, dies zu tun. Sie können festlegen, welche Komponententests ausgeführt werden sollen, abhängig von ihrem Assembly-Namen.

Als Standardverhalten werden alle Komponententests in Baugruppen ausgeführt, deren Name "test" enthält. Ein einfacher Fix wäre, Ihre Integrationstests in etwas umzubenennen, das nicht "test" enthält.


Wenn Sie categories verwenden möchten, können Sie AOP verwenden. Mit Postsharp können Sie beispielsweise einen Aspekt in Ihrer Integrationstestassembly erstellen, der setzt das Attribut auf die Methode . Aktivieren Sie dann den Aspekt für alle öffentlichen Methoden in Ihrer Integrationsassembly, wenn alle Tests in einer DLL oder in jeder Integrationstestklasse zusammengefasst sind.

4
Carra

Sie können nach "Klassenname" im Test Explorer-Bereich gruppieren.

Mit dem test TestCategory-Attribut können Sie Ihr Problem nicht lösen, nur weil Attribute in C # Metadaten sind und nicht als dynamische Werte verwendet werden können.

2
Daniele

Eine Möglichkeit, diese Einschränkung zu umgehen, besteht darin, die Testkategorie an den Anfang jeder Testmethode zu setzen. Benennen Sie beispielsweise Ihre Komponententests

public void UnitTestDoSomething_ExpectThis()

und Ihren Integrationstest

public void IntegrationTestDoSomething_ExpectThis()

Wenn Sie dann Ihre TFS-Abfrage durchführen, um die Integrationstests abzurufen, können Sie dies tun

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

Obwohl dies keine perfekte Lösung ist, können Sie Ihre Tests in Code und TFS besser unterscheiden. Alternativ können Sie die Bereiche und Iterationspfade anzeigen.

2
Zee

In VS 2017 ist dies möglich (und scheint Teil von VS2012 Update 1 zu sein).

Sie können [TestCategory ("Integration") "einer Klasse in Ihrem Komponententest hinzufügen und auf alle Tests anwenden lassen, ebenso wie [TestCategory (" Unit ")] in Ihren Komponententestklassen.

Sie können dann die Suchleiste des Test-Explorers verwenden, um nach Trait-Name = Einheit zu filtern. "Alle ausführen" führt nur die Tests aus, die Ihrer Suche entsprechen. 

Wenn Sie diese Tests auf Ihrem Build-Server ausführen, können Sie einen Schalter wie/category verwenden: Unit, um nur die Unit-Tests auszuführen.

0
Rusty Divine