我正在使用PHPUnit,而我的传统方法是使用我正在测试的方法调用的模拟对象和方法。模拟对象被告知单元测试的输入结果。问题是提供给模拟对象的部分输入是由被测试的方法随机生成的(并且单元测试无法知道它们是什么)。
只是想知道是否有人可以提出解决方案。
答案 0 :(得分:2)
在不知道具体情况的情况下很难分辨,但也许你可以重构一些随机数提供者到你测试的对象中。在测试期间,您可以使用硬编码的随机数种子来获得可重现的结果。
答案 1 :(得分:2)
如果您有预期结果的地图,并且您从关键字集中随机抽取,则可以具有一定程度的随机性,并且仍然能够预测预期结果是什么。
答案 2 :(得分:2)
可以将“随机部分”注入到方法中(或者是随机 核心功能)吗?
E.g。 (也许是一个过于简单的例子,字面意思是“随机”)而不是
function foo($x, $y) {
return $x * rand(1, $y);
}
使用类似
的内容function foo($x, $r) {
return $x * $r->getNext();
}
通过这种方式,您可以在测试中消除尽可能多的“随机性”,因为您可以为$ r传递一个并不真正返回随机值的对象,例如边缘情况。
答案 3 :(得分:1)
我一直认为单元测试是可重复的。 (我的意思是每次运行都表现相同并给出相同的结果)
单元测试还有其他前提条件,但对我来说,它是最重要的一个。
(看看this very good definition)
鉴于此,可能无法测试您的具体情况
我会尝试将代码的随机内容分成特定部分。然后,我会将其视为数据源,因此我也会尝试模拟它。
我希望你能将它应用到你的背景中。
答案 4 :(得分:0)
您不必使用对其输入严格的模拟 - 只有在为测试增加价值时才这样做。
在其他情况下,使用存根,它们不关心它们的输入,或者有些方法是严格的,有些方法是必要的。