我想使用模拟测试算法。该算法 - 在当前实现中 - 在多个通道中迭代容器类,并从中获取 set()s 和 get()s 值。测试的目的是验证最终结果,存储在容器中。最终值取决于在通道之间读取和写入的值。例如,任何元素的值可能会多次更改,直到算法完成,并且最有可能的是,它作为迭代 n 的结果的值将取决于它在迭代 n-1 之后的值。
我喜欢模拟的想法,我很想在上述场景中使用它们,因为它可以让我在算法发生错误行为时验证它,而不仅仅是在计算完成时。但是,我不确定这是否真的是一个好主意,因为我必须将模拟真实的期望与当前实现联系起来(例如,“期望 get(element n) 并返回 x,然后 set(元素 n,值 x+1),另一个 get(n) 并返回 x+1,然后期望 set(n, x+2) 等")。
虽然允许我验证中间值是否符合预期,但我认为这样的预期会与测试的目的相矛盾(验证算法是否计算出正确的最终值),并且如果实现发生变化,测试可能会失败,而不管正确性如何最终值。
现在我的问题是:我错过了什么吗?不过,在这种情况下是否有一种使用模拟的好方法?还是在这里使用它们根本没有意义?其他人如何处理这个问题?
最后一句话:我说的是测试 c++ 代码和使用 googlemock,如果这对你的答案有任何影响的话。
ps:我在这里查看了谷歌和文章(特别是Mocking迭代行为- 只解决了增加返回值的问题),但是,我没有找到任何接近我的问题的东西。