我正在研究单元测试。据我所知,几乎所有单元测试都使用返回值或输出参数作为其测试用例中的预期值。
没有返回值或输出参数的函数的期望值是多少?
例子:
void unit_test()
{
cout << "Hello" << endl;
}
当然,这个功能很简单。所以,这个功能似乎不需要单元测试。但这只是一个示例。你认为 unit_test
函数有副作用吗?你会如何测试它?
最佳答案
如果您正在编写一个您知道应该测试的函数,那么您应该将其设计为在您的框架中可测试。在这里,如果您的测试是在您可以验证流程输出的流程级别完成的,那么写入 std::cout 就可以了。否则,您可能希望将输出流作为函数的参数,如:
void unit_test(std::ostream& os = std::cout)
{
os << "Hello" << endl;
}
然后你可以像这样测试它:
std::ostringstream oss;
unit_test(oss);
assert(oss && oss.str() == "Hello");
如图所示,制作经过良好测试的软件需要一些让步……测试需求反馈到设计中。
编辑:如果您必须在不更改它们的情况下测试预先存在的函数,那么请考虑:
#include <sstream>
#include <iostream>
void f()
{
std::cout << "hello world\n";
}
int main()
{
std::ostringstream oss;
std::streambuf* p_cout_streambuf = std::cout.rdbuf();
std::cout.rdbuf(oss.rdbuf());
f();
std::cout.rdbuf(p_cout_streambuf); // restore
// test your oss content...
assert(oss && oss.str() == "hello world\n";
std::cout << oss.str();
}
关于c++ - 如何对写入 stdout/std::cout 的函数进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4191089/