![]() |
1
20
如果随机性是基于它调用的随机数生成器的,那么可以装配一个stub random()函数,该函数返回各种结果,以提供预期的输出。 |
![]() |
2
4
你可以做两件事之一:
选项1几乎总是首选。通过包含随机数生成器,您将不再测试代码的原子单元,并且通过将随机组件包含到单元测试中,您需要进行统计以验证代码是否正常工作。有一些错误是选项2在合理数量的测试中永远无法发现的,这是令人担忧的。 |
![]() |
3
3
不确定这是不是最好的方法,但我会用
我想您可以使用挂起测试作为一个度量来决定它是否失败,这样您就可以取消限制:
|
![]() |
4
3
单元测试结果不是给定响应的单个值,而是一系列输入值的分布。概率意味着您必须运行许多测试来构建它。 如果您的对象真的应该返回一个值(平均时间的一半,其余时间的一半),那么适当的测试应该是运行许多测试,并确保限制行为为您提供所需的分布。建立适当的结果分布并确保它符合您的期望。 |
![]() |
5
2
如果决策是真正随机的(或伪随机的),那么您可以从函数中分离出选择一个结果与另一个结果的关系。例如,您的函数可以接受一个委托或另一个对象作为参数,该委托或对象的唯一任务是“抛硬币”,但与这两个参数或它们的任何逻辑无关。然后,单元测试可以提供一个模拟决策者对象,返回测试想要检查的任何结果。 |
![]() |
6
1
通过分离和/或 injection :
原件
分离
现在测试
你相信,如果你测试了上面的内容,那么
工作就是工作。 注射
现在测试
和
当然,有更复杂/更圆滑的方法可以做到这一点,但这是基本的想法。我用这些技巧来测试洗牌功能。另一种情况是:通过调用系统api gettime()来使用当前时间的函数可能很难测试,除非您愿意在一天中非常特定的时间运行单元测试:-)。分离和注射易测试。 |
![]() |
mg610 · 如何开始C++单元测试 2 年前 |
![]() |
Phil Gunning · 使用嵌套函数更改进行模拟测试 2 年前 |
![]() |
shilin agre · 在Python中测试修饰函数 2 年前 |
![]() |
SlipScout · Unittest只传递单个值,而不是获取多个值 2 年前 |
![]() |
Alex · 从实际对象的实例返回默认模拟结果 2 年前 |