Pex の使用方法が間違っていると思います。パラメーター化された単体テストでアサーションを記述することを強くお勧めします。
アサーションを記述すると、Pex は体系的にそれらを無効にしようとします。ここで Pex の力が発揮されます。アサーションを記述すればするほど、バグを見つけようとします。
Pex を使用して、アサーションを記述せずにコード カバレッジの高いテスト スイートを取得すると、コード カバレッジと保証されたランタイム例外という、要求されたものだけが得られます。Pex は「のみ」ブランチをカバーしようとします (1 アサーション = 1 ブランチ)。カバーするブランチがない場合 (アサーションなし)、興味深いテスト ケースは生成されません。
一般に、パラメーター化された単体テストでアサーションを書くことは、より一般的であるため、書くのが難しくなります。丸めの動作から始めましょう。丸めの発生を許可する境界は確かにあり、これは自然にパラメーター化された単体テストに変換されます。
[PexMethod]
public void RoundInBounds(double value)
{
var money = new Money(value);
// distance between value and amount should be at most 0.01/2
Assert.AreEqual(value, money.Amount, 0.005);
}
それらを書くために使用できる多くのパターンもあります。たとえば、「Money」クラスはおそらく冪等です。Money インスタンスで「Amount」の値をフィードバックすると、Amount が返されます。これは、パラメータ化された単体テストにエレガントに変換されます。
[PexMethod]
public void RoundIsIdempotent(double value)
{
var first = new Money(value).Amount;
var second = new Money(first).Amount;
Assert.AreEqual(first, second, 0.0001);
}
また、パラメーター化された単体テストは間違いなく TDD の世界に属していることにも注意してください。最初にパラメーター化された単体テストを作成するだけで、Pex は失敗したバグを見つけ、バグを修正し、Pex は次の失敗したバグを見つけます。
これにより、Pex は便利なツールになりますか? あなたが裁判官になります。