Attributglossar
Attribute nach Namespace
Microsoft.Pex.Framework
Microsoft.Pex.Framework.Settings
Microsoft.Pex.Framework.Instrumentation
Microsoft.Pex.Framework.Using
Microsoft.Pex.Framework.Validation
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
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
PexAllowedExceptionFromType
PexAllowedExceptionFromTypeUnderTest
Sie haben Fragen oder Anmerkungen?
Posten Sie Ihre Ideen und Featureanfragen in der Entwicklercommunity.