Attributglossar

Attribute nach Namespace

PexAssumeNotNull

Dieses Attribut gibt an, dass der zugehörige Wert nicht NULL sein darf. Es kann folgenden Objekten zugeordnet werden:

  • einem Parameter einer parametrisierten Testmethode

    // assume foo is not null
    [PexMethod]
    public void SomeTest([PexAssumeNotNull]IFoo foo, ...) {}
    
  • einem Feld

    public class Foo {
       // this field should not be null
       [PexAssumeNotNull]
       public object Bar;
    }
    
  • einem Typ

    // never consider null for Foo types
    [PexAssumeNotNull]
    public class Foo {}
    

Es kann auch an eine Testassembly, Testfixierung oder Testmethode angefügt werden; in diesem Fall müssen die ersten Argumente angeben, für welches Feld oder welchen Typ die Annahmen gelten. Wenn das Attribut für einen Typ gilt, dann gilt es für alle Felder mit diesem formalen Typ.

PexClass

Dieses Attribut markiert eine Klasse, die Durchsuchungsvorgänge enthält. Dies entspricht dem TestClassAttribute von MSTest (oder dem TestFixtureAttribute von NUnit). Dieses Attribut ist optional.

Die mit PexClass markierten Klassen müssen standardmäßig konstruierbar sein:

  • öffentlich exportierter Typ
  • Standardkonstruktor
  • nicht abstrakt

Wenn die Klasse diese Anforderungen nicht erfüllt, wird ein Fehler gemeldet, und das Durchsuchen schlägt fehl.

Es wird auch dringend empfohlen, diese Klassen partiell zu machen, damit IntelliTest neue Tests generieren kann, die Teil der Klasse sind, sich aber in einer separaten Datei befinden. Dieser Ansatz löst aufgrund der Sichtbarkeit viele Probleme und ist ein übliches Verfahren in C#.

Zusätzliche Sammlung und Kategorien:

[TestClass] // MSTest test fixture attribute
[PexClass(Suite = "checkin")] // fixture attribute
public partial class MyTests { ... }

Angeben des getesteten Typs:

[PexClass(typeof(Foo))] // this is a test for Foo
public partial class FooTest { ... }

Die Klasse enthält möglicherweise Methoden, die mit PexMethod versehen wurden. IntelliTest erkennt auch Einrichtungs- und Löschmethoden.

PexGenericArguments

Dieses Attribut bietet ein Typtupel für die Instanziierung eines generischen parametrisierten Unittests.

PexMethod

Dieses Attribut kennzeichnet eine Methode als parametrisierten Unittest. Die Methode muss sich in einer Klasse befinden, die mit dem PexClass-Attribut markiert ist.

IntelliTest generiert herkömmliche, parameterlose Tests, die den parametrisierten Unittest mit verschiedenen Parametern aufrufen.

Der parametrisierte Unittest:

  • muss eine Instanzmethode sein
  • muss für die Testklasse sichtbar sein, in der die generierten Tests gemäß dem Einstellungswasserfall platziert werden
  • kann eine beliebige Anzahl von Parametern annehmen
  • kann generisch sein

Beispiel

[PexClass]
public partial class MyTests {
     [PexMethod]
     public void MyTest(int i)
     { ... }
}

PexExplorationAttributeBase

Weitere Informationen

PexAssemblySettings

Dieses Attribut kann auf Assemblyebene festgelegt werden, um die Werte der Standardeinstellung für alle Durchsuchungsvorgänge außer Kraft zu setzen.

using Microsoft.Pex.Framework;
// overriding the test framework selection
[assembly: PexAssemblySettings(TestFramework = "MSTestv2")]

PexAssemblyUnderTest

Dieses Attribut gibt an, dass eine Assembly im aktuellen Testprojekt getestet wird.

[assembly: PexAssemblyUnderTest("MyAssembly")]

PexInstrumentAssemblyAttribute

Dieses Attribut wird für eine Assembly verwendet, die instrumentiert werden soll.

Beispiel

using Microsoft.Pex.Framework;

// the assembly containing ATypeFromTheAssemblyToInstrument should be instrumented
[assembly: PexInstrumentAssembly(typeof(ATypeFromTheAssemblyToInstrument))]

// the assembly name can be used as well
[assembly: PexInstrumentAssembly("MyAssemblyName")]

PexUseType

Dieses Attribut teilt IntelliTest mit, dass ein bestimmter Typ zum Instanziieren (abstrakter) Basistypen oder Schnittstellen verwendet werden kann.

Beispiel

[PexMethod]
[PexUseType(typeof(A))]
[PexUseType(typeof(B))]
public void MyTest(object testParameter)
{
     ... // IntelliTest will consider types A and B to instantiate 'testParameter'
}

PexAllowedException

Wenn dieses Attribut an eine PexMethod (oder PexClass) angefügt wird, ändert sich die Standardlogik von IntelliTest, die angibt, wann der Test fehlschlägt. Der Test wird nicht als fehlgeschlagen angesehen, auch wenn er die angegebene Ausnahme auslöst.

Beispiel

Der folgende Test legt fest, dass der Konstruktor von Stack eine ArgumentOutOfRangeException auslösen kann:

class Stack {
  int[] _elements;
  int _count;
  public Stack(int capacity) {
    if (capacity<0) throw new ArgumentOutOfRangeException();
    _elements = new int[capacity];
    _count = 0;
  }
  ...
}

Der Filter wird wie folgt an eine Fixierung angefügt (er kann auch auf Assembly- oder Testebene definiert werden):

[PexMethod]
[PexAllowedException(typeof(ArgumentOutOfRangeException))]
class CtorTest(int capacity) {
  Stack s = new Stack(capacity); // may throw ArgumentOutOfRangeException
}

PexAllowedExceptionFromAssembly

Weitere Informationen

PexAllowedExceptionFromType

Weitere Informationen

PexAllowedExceptionFromTypeUnderTest

Weitere Informationen

Sie haben Fragen oder Anmerkungen?

Posten Sie Ihre Ideen und Featureanfragen in der Entwicklercommunity.