Глоссарий атрибутов

Список атрибутов по пространству имен

PexAssumeNotNull

Этот атрибут утверждает, что управляемое значение не может быть равно NULL. Его можно подключить к:

  • параметру метода параметризованного теста;

    // assume foo is not null
    [PexMethod]
    public void SomeTest([PexAssumeNotNull]IFoo foo, ...) {}
    
  • полю

    public class Foo {
       // this field should not be null
       [PexAssumeNotNull]
       public object Bar;
    }
    
  • типу.

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

Его также можно подключить к тестовой сборке, тестовой фикстуре или методу теста. В этом случае первые аргументы должны указывать, к какому полю или типу применяются предположения. Если атрибут применяется к типу, он применяется ко всем полям с таким формальным типом.

PexClass

Этот атрибут помечает класс, который содержит изучения. Это эквивалент TestClassAttribute в платформе MSTest (или TestFixtureAttribute в платформе NUnit). Этот атрибут является необязательным.

Классы, помеченные с помощью PexClass, должны быть конструируемыми по умолчанию:

  • открыто экспортируемый тип
  • конструктор по умолчанию
  • не абстрактный

Если класс не удовлетворяет этим требованиям, возвращается ошибка, а исследование завершается со сбоем.

Настоятельно рекомендуется сделать эти классы частичными, чтобы IntelliTest мог создавать тесты, являющиеся частью класса, но находящиеся в отдельном файле. Такой подход решает многие проблемы, связанные с видимостью, и является стандартным приемом в C#.

Дополнительный набор и категории:

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

Указание тестируемого типа:

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

Класс может содержать методы, помеченные с помощью PexMethod. IntelliTest также поддерживает методы подготовки и демонтажа.

PexGenericArguments

Этот атрибут предоставляет кортеж типов для создания экземпляра универсального параметризованного модульного теста.

PexMethod

Этот атрибут помечает метод как параметризованный модульный тест. Метод должен находиться внутри класса, помеченного атрибутом PexClass.

IntelliTest создаст традиционные тесты без параметров, вызывающие параметризованный модульный тест с разными параметрами.

Параметризованный модульный тест:

  • должен быть методом экземпляра;
  • должен быть видимым для тестового класса, в который помещаются созданные тесты согласно каскаду параметров;
  • может принимать любое число параметров;
  • может быть универсальным.

Пример

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

PexExplorationAttributeBase

Дополнительные сведения

PexAssemblySettings

Этот атрибут можно задать на уровне сборки, чтобы переопределить значения параметров по умолчанию для всех исследований.

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

PexAssemblyUnderTest

Этот атрибут указывает сборку, проверяемую текущим тестовым проектом.

[assembly: PexAssemblyUnderTest("MyAssembly")]

PexInstrumentAssemblyAttribute

Этот атрибут используется для указания инструментируемой сборки.

Пример

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

Этот атрибут сообщает IntelliTest, что можно использовать определенный тип для создания экземпляров (абстрактных) базовых типов или интерфейсов.

Пример

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

PexAllowedException

Если этот атрибут подключен к PexMethod (или PexClass), он по умолчанию изменяет логику IntelliTest, которая определяет неудачное выполнение тестов. Тест не будет рассматриваться как непройденный, даже если он выдает указанное исключение.

Пример

Следующий тест указывает, что конструктор Stack может вызывать исключение ArgumentOutOfRangeException:

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

Фильтр подключен к фикстуре следующим образом (он может также быть определен на уровне сборки или тестирования):

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

PexAllowedExceptionFromAssembly

Дополнительные сведения

PexAllowedExceptionFromType

Дополнительные сведения

PexAllowedExceptionFromTypeUnderTest

Дополнительные сведения

Хотите отправить отзыв?

Делитесь своими идеями и пожеланиями относительно новых функций в сообществе разработчиков.