我正在尝试编写一个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不满足代码合同?
答案 0 :(得分:1)
我不确定Pex将如何处理测试方法中的合同,但我不认为它是一件好事:)
如果你想让Pex这样做,那么正确的做法是使用PexAssume.IsTrue(value)
。