我正在使用CPPUNIT为我的C ++程序进行单元测试
对于非void函数,假设函数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%的代码覆盖率
答案 0 :(得分:5)
首先,您可以重写您的函数以避免调用全局对象(如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以使用'fake'对象调用您的函数。 (如果MyStream
不存在,请写std::stringstream
第二,“void function”可能会修改某些(全局)状态,可以在调用之前/之后检查这些状态,看看这些状态是否正确更改。
第三次,测试外部功能将被视为集成测试,而不是一次性的单元测试。