有没有办法比较什么都不返回的 void 函数的返回值?

问题描述 投票:0回答:1

我正在做一个单元测试,我想比较一个不返回任何东西的

void
函数的结果。

我有以下例子:

void foo (string &istr){
    // empty string (negative case)
    if (istr.empty())
    {
        //      std::cout << "empty string"
        //  << "\n";
        return;
    }

    // only white space (negative case)
    if (istr.begin(), istr.end(), isspace)
    {
        // std::cout << "only white space"
        //           << "\n";
        return;
    }

    // some code doing something...
}

而我想测试一下,比如:

inline bool test4_getTokenFreqVec(){

    std::string input1 = "  ";
        
    getTokenFreqVec(input1);

    if(getTokenFreqVec(input1) == null){
        return true;
    }
    
    return false;
}

我知道不可能将

void
函数与 C++ 中的
null
进行比较,所以我想问一下,是否有修复我的单元测试的解决方案?

注意:您不能将

void
函数更改为
int
或任何其他数据类型。

c++ function return void return-type
1个回答
1
投票

由于函数返回

void
,你不能将它与任何东西进行比较。既然你说返回类型不能更改为另一种类型,那么你只有几个选择:

  • 如果函数修改其

    istr
    参数的值,则单位 测试可以检查传递给该参数的
    string
    对象是否已以理想的方式进行了修改。

  • 由于函数写入了

    std::cout
    ,您的单元测试可以暂时重定向
    std::cout
    以将其输出写入
    std::stringbuf
    而不是
    STDOUT
    ,然后您的单元测试可以检查该缓冲区的内容是否包含所需的输出。

  • 否则,在需要时让函数

    throw
    出现异常,并让单元测试捕获该异常。

© www.soinside.com 2019 - 2024. All rights reserved.