属性の解説

名前空間別の属性

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

この属性は、"探索" を含むクラスをマークします。 MSTest の TestClassAttribute (または、NUnit の TestFixtureAttribute) と同等です。 この属性は省略可能です。

PexClass でマークされるクラスは、"既定で構造化可能" である必要があります。

  • パブリックにエクスポートされる型
  • 既定のコンストラクター
  • 非抽象

クラスがこれらの要件を満たしていない、エラーが報告されて、探索は失敗します。

また、IntelliTest がクラスの一部である新しいテストを別のファイルに生成できるように、これらのクラスを partial にすることを強くお勧めします。 この方法は可視性による多くの問題を解決し、一般に 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

詳細情報

フィードバックが欲しい場合

ご意見や機能に関するご要望を開発者コミュニティで投稿してください。