Glossário do atributo

Atributos por namespace

PexAssumeNotNull

Esse atributo declara que o valor controlado não pode ser nulo. Ele pode ser anexado a:

  • um parâmetro de um método de teste parametrizado

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

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

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

Ele também pode ser anexado a um assembly de teste, acessório de teste ou método de teste, nesse caso o primeiro argumento deve indicar a qual campo ou tipo as suposições se aplicam. Quando o atributo se aplica a um tipo, ele se aplica a todos os campos com este tipo formal.

PexClass

Esse atributo marca uma classe que contém explorações. É o equivalente a MSTest TestClassAttribute (ou ao NUnit TestFixtureAttribute). Esse atributo é opcional.

As classes marcadas com PexClass devem ser construíveis por padrão:

  • tipo exportado publicamente
  • construtor padrão
  • não abstrato

Se a classe não atender a esses requisitos, um erro será relatado e a exploração falhará.

Também é altamente recomendável tornar essas classes parciais para que o IntelliTest possa gerar novos testes que fazem parte da classe, mas em um arquivo separado. Essa abordagem resolve muitos problemas devido à visibilidade e é uma técnica comum em C#.

Pacotes de teste e categorias adicionais:

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

Especificando o tipo em teste:

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

A classe pode conter métodos anotados com PexMethod. O IntelliTest também entende os métodos de configuração e desmontagem.

PexGenericArguments

Este atributo fornece uma tupla de tipo para instanciar um teste de unidade parametrizado genérico.

PexMethod

Esse atributo marca um método como um teste de unidade parametrizado. O método deve residir em uma classe marcada com o atributo PexClass.

O IntelliTest gerará testes tradicionais sem parâmetros, que chamam o teste de unidade parametrizado com parâmetros diferentes.

O teste de unidade parametrizado:

  • deve ser um membro de instância
  • deve ser visível para a classe de teste na qual os testes gerados são colocados de acordo com a Cascata de configurações
  • pode conter qualquer número de parâmetros
  • pode ser genérico

Exemplo

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

PexExplorationAttributeBase

Mais informações

PexAssemblySettings

Este atributo pode ser definido no nível de assembly para substituir os valores de configuração padrão para todas as explorações.

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

PexAssemblyUnderTest

Esse atributo especifica um assembly que está sendo testado pelo projeto de teste atual.

[assembly: PexAssemblyUnderTest("MyAssembly")]

PexInstrumentAssemblyAttribute

Este atributo é usado para especificar um assembly a ser instrumentado.

Exemplo

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

Este atributo diz ao IntelliTest que ele pode usar um tipo específico para criar uma instância de tipos base (abstratos) ou interfaces.

Exemplo

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

PexAllowedException

Se esse atributo estiver anexado a um PexMethod (ou a uma PexClass, ele vai alterar a lógica do IntelliTest padrão que indica quando os testes falham. O teste não será considerado como com falha, mesmo se ele lançar a exceção especificada.

Exemplo

O teste a seguir especifica que o construtor de Stack pode gerar um ArgumentOutOfRangeException:

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

O filtro é anexado a um acessório da seguinte maneira (ele também pode ser definido no nível de assembly ou de teste):

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

PexAllowedExceptionFromAssembly

Mais informações

PexAllowedExceptionFromType

Mais informações

PexAllowedExceptionFromTypeUnderTest

Mais informações

Recebeu comentários?

Poste suas ideias e solicitações de recursos na Comunidade de Desenvolvedores.