gpt4 book ai didi

c++ - 使用模拟测试迭代代码 - 它有意义吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:39 24 4
gpt4 key购买 nike

我想使用模拟测试算法。该算法 - 在当前实现中 - 多次遍历容器类并从中设置()和获取()值。测试的目的是验证存储在容器中的最终结果。最终值取决于遍历之间读取和写入的值。例如在算法完成之前,任何元素的值都可能更改多次,并且最有可能的是,它作为第 n 次迭代的结果的值将取决于它在第 n-1 次迭代后的值。

我喜欢模拟的想法,我很乐意在上述场景中使用它们,因为它可以让我在算法的错误行为发生时验证它,而不仅仅是在计算完成时。但是,我不确定这是否真的是个好主意,因为我必须将对模拟真实的期望与当前实现联系起来(例如,“期望 get(element n) 并返回 x,然后设置(元素 n,值 x+1),另一个 get(n) 并返回 x+1,然后期待 set(n, x+2) 等。”)。

虽然允许我验证中间值是否符合预期,但我认为这种预期会与测试的目的(验证算法计算出正确的最终值)相矛盾,并且如果实现发生变化,测试可能会失败,无论最终值的正确性。

现在我的问题是:我错过了什么吗?在这种情况下是否有使用模拟的好方法?还是在这里使用它们根本没有意义?其他人如何处理这个问题?

最后的评论:我说的是测试 C++ 代码和使用 googlemock,如果这对您的答案有任何影响的话。

p.s.:我查看了 google 和此处的文章(尤其是 Mocking iterative behaviour - 只解决了增加返回值的问题),但是,我没有找到任何接近我的问题的东西。

最佳答案

为算法的最终输出创建单元测试。您希望您的自动化测试能够验证预期结果,因为这是程序的其他部分将利用的结果。

就测试算法代码中的各个步骤而言,这更像是一项使用调试器逐步完成的工作,而不是用于自动化测试。了解算法的内部工作原理应该是一次性的事情,一旦您掌握了正确的方法,就无需继续测试其中的各个步骤。

关于c++ - 使用模拟测试迭代代码 - 它有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7389141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com