2012-01-11 11 views
2

私は100sのフィールドでMyClassを持っていると言います。Pexで入力パラメータのセットを定義する方法は?

I入力PARAMとしてはMyClassのオブジェクトを使用する場合、Pexが単に(すべての可能な組み合わせ(私も簡単なテストにパス1000に実行)

[PexMethod] ボイドMytestMethodを生成しようとチョークなりますMyClassの定義済みオブジェクトのみを使用するようにPexに指示するにはどうすればよいですか?言い換えれば

私は手動で上記のコードでのparamのための可能な状態のリストを指定し、それをPexとは、値のすべての組み合わせを生成しようとはしません

答えて

2

Pexが大量の無関係な入力、冗長な入力、またはそれ以外の有益な入力を生成していることがわかった場合は、パラメータ化されたユニットテストの入力に対して生成する値をPexAssumeを使って整形することができます。あなたが提供する基準のセット。

あなたは、引数は、例えば、定義済みの値のコレクションから来て、あなたがこのような何かを行うことができていることを確認したいと思った場合は、次の

public void TestSomething(Object a) { 
    PexAssume.IsTrue(someCollection.Contains(a)); 
} 

PexAssumeは、より一般的な入力剪定のために、他のヘルパーメソッドを持っていますIsNotNull,AreNotEqualなどです。そこにはほとんど何も書かれていませんが、いくつかのコレクション固有の機能もありますが、それらのメソッドが存在する場合は、それらに精通していません。

さらに詳しい情報はthe Pex manualをご覧ください。

+0

ありがとう、クリス。私はPexAssumeの使用を考えなかった。 Shap00私は工場やPexArgumentsのどちらも残念なことに私の問題を解決しません。 – user1143653

0

乾杯を使用しペックスをお伝えしたいと思います。代わりに、あなたのコードを分析し、すべてのブランチをカバーしようとします。あなたは

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ドキュメントの「シード値」を検索。

関連する問題