Glossaire des attributs
Attributs par espace de noms
Microsoft.Pex.Framework
Microsoft.Pex.Framework.Settings
Microsoft.Pex.Framework.Instrumentation
Microsoft.Pex.Framework.Using
Microsoft.Pex.Framework.Validation
PexAssumeNotNull
Cet attribut indique que la valeur gérée ne peut pas être null. Il peut être associé à :
un paramètre d’une méthode de test paramétrable
// assume foo is not null [PexMethod] public void SomeTest([PexAssumeNotNull]IFoo foo, ...) {}
un champ
public class Foo { // this field should not be null [PexAssumeNotNull] public object Bar; }
un type
// never consider null for Foo types [PexAssumeNotNull] public class Foo {}
Il peut également être associé à un assembly de test, un élément ou une méthode de test ; dans ce cas, les premiers arguments doivent indiquer le champ ou le type auquel les hypothèses s’appliquent. Quand l’attribut s’applique à un type, il s’applique à tous les champs avec ce type formel.
PexClass
Cet attribut marque une classe qui contient des explorations. Il est l’équivalent de l’attribut MSTest TestClassAttribute (ou NUnit TestFixtureAttribute). Cet attribut est facultatif.
Les classes marquées avec PexClass doivent être constructibles par défaut :
- type exporté publiquement
- constructeur par défaut
- non abstraite
Si la classe ne répond pas à ces exigences, une erreur est signalée et l’exploration échoue.
Il est également vivement conseillé que ces classes soient partielles pour qu’IntelliTest puisse générer de nouveaux tests qui font partie de la classe, mais dans un fichier distinct. Cette approche résout de nombreux problèmes de visibilité et est une technique classique en C#.
Suite et catégories supplémentaires :
[TestClass] // MSTest test fixture attribute
[PexClass(Suite = "checkin")] // fixture attribute
public partial class MyTests { ... }
Spécification du type de test :
[PexClass(typeof(Foo))] // this is a test for Foo
public partial class FooTest { ... }
La classe peut contenir des méthodes annotées avec PexMethod. IntelliTest comprend également les méthodes d’installation et de suppression.
PexGenericArguments
Cet attribut fournit un type tuple pour l’instanciation d’un test unitaire paramétrable générique.
PexMethod
Cet attribut marque une méthode comme test unitaire paramétrable. La méthode doit résider dans une classe marquée avec l’attribut PexClass.
IntelliTest génère des tests sans paramètre classiques qui appellent le test unitaire paramétrable avec différents paramètres.
Le test unitaire paramétrable :
- doit être une méthode d’instance
- doit être visible pour la classe de test dans laquelle les tests générés sont placés en fonction de la cascade des paramètres
- peut accepter un nombre quelconque de paramètres
- peut être générique
Exemple
[PexClass]
public partial class MyTests {
[PexMethod]
public void MyTest(int i)
{ ... }
}
PexExplorationAttributeBase
PexAssemblySettings
Cet attribut peut être défini au niveau de l’assembly pour remplacer les valeurs de paramètre par défaut pour toutes les explorations.
using Microsoft.Pex.Framework;
// overriding the test framework selection
[assembly: PexAssemblySettings(TestFramework = "MSTestv2")]
PexAssemblyUnderTest
Cet attribut spécifie un assembly qui est testé par le projet de test actuel.
[assembly: PexAssemblyUnderTest("MyAssembly")]
PexInstrumentAssemblyAttribute
Cet attribut est utilisé pour spécifier un assembly à instrumenter.
Exemple
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
Cet attribut indique à IntelliTest qu’il peut utiliser un type particulier pour instancier des interfaces ou des types de base (abstrait).
Exemple
[PexMethod]
[PexUseType(typeof(A))]
[PexUseType(typeof(B))]
public void MyTest(object testParameter)
{
... // IntelliTest will consider types A and B to instantiate 'testParameter'
}
PexAllowedException
Si cet attribut est associé à PexMethod (ou à PexClass), il modifie la logique IntelliTest par défaut qui indique quand les tests échouent. Le test ne sera pas considéré comme ayant échoué, même s’il lève l’exception spécifiée.
Exemple
Le test suivant spécifie que le constructeur de Stack peut lever une ArgumentOutOfRangeException :
class Stack {
int[] _elements;
int _count;
public Stack(int capacity) {
if (capacity<0) throw new ArgumentOutOfRangeException();
_elements = new int[capacity];
_count = 0;
}
...
}
Le filtre est attaché à un élément comme suit (il peut également être défini au niveau de l’assembly ou du test) :
[PexMethod]
[PexAllowedException(typeof(ArgumentOutOfRangeException))]
class CtorTest(int capacity) {
Stack s = new Stack(capacity); // may throw ArgumentOutOfRangeException
}
PexAllowedExceptionFromAssembly
PexAllowedExceptionFromType
PexAllowedExceptionFromTypeUnderTest
Vous avez des commentaires ?
Postez vos idées et demandes de fonctionnalités sur la Communauté des développeurs.