gpt4 book ai didi

c++ - 不返回任何值的函数的单元测试

转载 作者:行者123 更新时间:2023-11-28 02:21:33 25 4
gpt4 key购买 nike

我正在使用 cppunit 在 C++ 中进行单元测试。我在 Internet 上看到了一些示例,这些示例显示测试返回某些值的函数。我的项目中有一些函数不返回任何值,但在内部进行一些计算。在这里我想测试这些函数内部的计算是否正确完成了计算,我该怎么做?例如我有一个函数

void Flash::SerializeToBytes(Buffer &buffer) const
{
// calculations
}

最佳答案

这些自动测试的一般概念总是相同的:您知道,在给定特定输入的情况下,函数应该产生特定结果。将实际结果与您期望的结果进行比较。如果它们相同,则测试通过,否则您的代码或测试中存在错误。

也就是说,让我们尝试将其应用到您的具体案例中。您正在通过引用传递 buffer,以便您可以修改它(否则它应该是一个 const 引用!)。因此,您必须编写调用函数的测试,然后检查 buffer 发生了什么,而不是检查返回值。从概念上讲是一样的:您提供一些输入并将输出与预期的输出进行比较。只是在这种情况下,输出不是返回值,而是用作输入的同一对象。

如果这是不可能的,例如因为参数是通过 const 引用或值传递的,您必须了解您的函数如何与世界其他部分交互。如果它不返回、抛出、修改其中一个输入参数等,那么它就不是这些测试的理想候选者。这些可能意味着两件事:这是一个您不关心测试的函数(至少以这种方式),或者您必须重构您的代码。

前者的一个例子是与硬件交互的东西。假设您正在为一些带有 LED 的嵌入式系统编写代码,并且您有一个函数可以打开或关闭 LED。这种情况不适合自动测试。跳过它,您不需要用自动测试覆盖 100% 的代码(参见 this great answer )。

另一方面,由于全局变量,您的函数可能会与世界其他地方交互,而您的程序会大量使用全局变量(糟糕的想法)。那么在这种情况下,您可以仍然编写一些测试(只需检查调用函数后全局变量发生了什么),但是您应该做的是重构您的代码以便您的函数接收它需要的所有变量作为参数,并且在为所有函数完成后,您可以将全局变量更改为非全局变量,最终得到返回值和/或的函数修改作为引用或指针传递的参数,编写测试很容易。

简而言之:如果您有一个您不知道如何测试的函数,那么可能不值得为它编写测试,或者它表明您的代码可能需要进行一些更改。

关于c++ - 不返回任何值的函数的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32268019/

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