Glossaire des attributs

Attributs par espace de noms

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

Plus d’informations

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

Plus d’informations

PexAllowedExceptionFromType

Plus d’informations

PexAllowedExceptionFromTypeUnderTest

Plus d’informations

Vous avez des commentaires ?

Postez vos idées et demandes de fonctionnalités sur la Communauté des développeurs.