Pexは、可能なすべての値の組み合わせを生成しようとはしません。代わりに、コードを分析し、すべてのブランチをカバーしようとします。だからあなたが持っているなら
if (MyObject.Property1 == "something")
{
...
}
次に、を含むオブジェクトを作成しようとしますProperty1 == "something"
。したがって、テストをいくつかの事前定義されたオブジェクトに制限することは、「Pex哲学」に反します。そうは言っても、次の情報がおもしろいと思うかもしれません。
Pexファクトリクラスを提供できます。たとえば、このブログ投稿またはこれを参照してください。
[PexFactoryClass]
public partial class EmployeeFactory
{
[PexFactoryMethod(typeof(Employee))]
public static Employee Create(
int i0,
string s0,
string s1,
DateTime dt0,
DateTime dt1,
uint ui0,
Contract c0
)
{
Employee e0 = new Employee();
e0.EmployeeID = i0;
e0.FirstName = s0;
e0.LastName = s1;
e0.BirthDate = dt0;
e0.StartDateContract = dt1;
e0.Salary = ui0;
e0.TypeContract = c0;
return e0;
}
}
次に、Pexは、コードの探索から検出した適切な値を使用して、このファクトリクラスを(デフォルトのファクトリではなく)呼び出します。ファクトリメソッドを使用すると、可能なパラメータと値を制限できます。
属性を使用して値を提案することもできPexArguments
ますが、これにより、Pexがコード内のブランチをカバーするために他の値を生成しようとするのを防ぐことはできません。最初に提供したものを試すだけです。
[PexArguments(1, "foo")] // try this first
void MyTest(int i, string s)
{
...
}
パラメータ化されたテストパターンに関するPDFドキュメントの「シード値」の詳細と検索については、こちらを参照してください。PexArguments