Pex不满足代码合同

时间:2011-07-28 17:20:27

标签: code-contracts pex pex-and-moles

我正在尝试编写一个pex测试,并且我注意到它总是提供一个假值作为我想要的一个参数。我的测试看起来像这样(简化:有/更多参数,但没有区别):

[PexMethod]
public void TestCtor(bool value)
{
    ArbitraryType myType = new ArbitraryType(value);
}

我想测试一个场景,我会让pex进行探索,确保value为真。我做了另一个看起来像这样的测试:

[PexMethod]
public void TestCtor(bool value)
{
    Contract.Requires(value == true);

    ArbitraryType myType = new ArbitraryType(value);
}

但是当我对Pex进行探索时,它仍会向value吐出错误并且它会生成“传递”的测试。如果我在要求说Contract.Assert(!value);之后放了一行,它将创建另一个测试,并为value传递true以使断言失败。

问题是,为什么Pex不满足代码合同?

1 个答案:

答案 0 :(得分:1)

我不确定Pex将如何处理测试方法中的合同,但我不认为它是一件好事:)

如果你想让Pex这样做,那么正确的做法是使用PexAssume.IsTrue(value)