乾杯を使用しペックスをお伝えしたいと思います。代わりに、あなたのコードを分析し、すべてのブランチをカバーしようとします。あなたは
if (MyObject.Property1 == "something")
{
...
}
を持っているのであれば、それはProperty1 == "something"
を持つオブジェクトを作成しようとします。したがって、いくつかの事前定義されたオブジェクトにテストを限定することは、「Pexの哲学」に反するものです。つまり、次の情報が興味深いことがあります。
Pexファクトリクラスを提供できます。たとえば、this blog postまたはthis oneを参照してください。
[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)
{
...
}
PexArguments
の詳細についてはhereを参照してもParameterized Test Patterns上のPDFドキュメントの「シード値」を検索。
ありがとう、クリス。私はPexAssumeの使用を考えなかった。 Shap00私は工場やPexArgumentsのどちらも残念なことに私の問題を解決しません。 – user1143653