【问题标题】:How to do unit testing for void functions CPPUNIT [duplicate]如何对 void 函数 CPPUNIT 进行单元测试 [重复]
【发布时间】:2014-01-23 05:22:17
【问题描述】:

我正在使用 CPPUNIT 对我的 C++ 程序进行单元测试

对于非空函数,假设函数add()存在

int add(int num1 , int num2)
{
  return num1+num2;
}

我可以像这样进行单元测试

void newtestclass::add()
{
    int result = add(2,3);
    CPP_ASSERT(result == 5 ); 

}

当我尝试对非空函数进行单元测试时遇到问题

void printmenu()
{
    cout<<"1) Option A"
        <<endl
        <<"2) Option B";
}

我如何对这些功能进行单元测试以确保 100% 的代码覆盖率

我在对嵌套在其他函数中的函数进行单元测试时也遇到了问题

void menu_select(char x)
{
    if ( x == 'a')
    {
        add();
    }
    else if ( x == 'b' )
    {
        subtract();
    }

}

void menu()
{
  char choice;
  cout<<"a) Add "
      <<endl
      <<"b) Subtract";
  cin>>choice;

  menu_select(choice);

}

我如何对这些函数进行单元测试以确保 100% 的代码覆盖率

【问题讨论】:

    标签: c++ unit-testing cppunit


    【解决方案1】:

    首先,您可以重写您的函数以避免调用全局对象(如std::cout

    void printmenu(std::ostream& stream)
    {
        stream << "1) Option A" << std::endl
               << "2) Option B";
    }
    

    现在您可以正常使用printmenu(std::cout); 您可以通过以下方式对其进行测试:

    std::stringstream ss;
    
    printmenu(ss);
    // Check that ss.str() is what you expect.
    

    您可能必须创建 Mock 才能使用“假”对象调用您的函数。 (如果std::stringstream 不存在,则写MyStream

    第二,“void function”可能会修改一些(全局)状态,可以在调用之前/之后检查这些状态是否正确更改。

    第三,测试外部函数将被视为集成测试,而不是单元测试。

    【讨论】:

    • 原谅我的无知,什么是集成测试??
    • Integration testing。总之就是对组合模块的测试。
    猜你喜欢
    • 2014-02-08
    • 2021-08-02
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2018-10-03
    相关资源
    最近更新 更多