我正在对一些 c# 代码进行测试,而 pex 没有用 Math.Acos 覆盖该语句(它是大型 switch 语句的一部分)。我很好奇是否有人知道为什么 pex 有这个限制?我在网上看了看,找不到任何东西。
问问题
206 次
1 回答
2
Pex 建立了它尝试覆盖的路径的约束系统(路径条件)。然后它依靠约束求解器为该约束系统生成令人满意的分配。在某些情况下,约束求解器无法找到值(在合理的时间内)。目前,这主要发生在涉及浮点变量或十进制类型变量的代码中。
例如,假设您要满足条件 Math.Acos(x) <= y。除非 Pex 可以通过先前执行中的输入 x 跟踪通过 Math.Acos 函数的路径(其中 Math.Acos(x) > y),否则约束求解器必须了解 Math.Acos 的工作原理才能解决该问题约束。
即使 Pex 可以访问 Math.Acos 的实现,生成的约束系统可能仍然过于复杂,约束求解器无法在合理的时间内处理。
于 2011-12-01T10:43:38.890 回答