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