void f()
{
cout << "blah" << endl;
}
BOOST_AUTO_TEST_CASE(f)
{
f();
// This would be a beauty
// BOOST_CHECK_PROGRAM_OUTPUT_MATCH("blah");
}
11
A
回答
19
是的,你可以通过重定向std::cout
为boost::test_tools::output_test_stream
,它提供了特殊的方法来比较输出做到这一点。为确保std::cout
始终可以正确恢复,可以使用自定义结构,如下例所示。
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
#include <boost/test/output_test_stream.hpp>
#include <iostream>
BOOST_AUTO_TEST_SUITE(TestSuite1)
struct cout_redirect {
cout_redirect(std::streambuf * new_buffer)
: old(std::cout.rdbuf(new_buffer))
{ }
~cout_redirect() {
std::cout.rdbuf(old);
}
private:
std::streambuf * old;
};
BOOST_AUTO_TEST_CASE(test1)
{
boost::test_tools::output_test_stream output;
{
cout_redirect guard(output.rdbuf());
std::cout << "Test" << std::endl;
}
BOOST_CHECK(output.is_equal("Test\n"));
}
BOOST_AUTO_TEST_SUITE_END()
4
我跟着@BjörnPollex的答案有些日子。但有一天,我发现没有必要这样做。只需使用boost::test_tools::output_test_stream
。
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
#include <boost/test/output_test_stream.hpp>
BOOST_AUTO_TEST_SUITE(TestSuite1)
BOOST_AUTO_TEST_CASE(test1)
{
boost::test_tools::output_test_stream output;
output << "Test";
BOOST_CHECK(output.is_equal("Test"));
}
BOOST_AUTO_TEST_SUITE_END()
欲了解更多信息,请阅读the official documentation。
相关问题
- 1. 升压测试没有输出
- 2. 用升压测试
- 3. 我可以用我的WatiN测试来进行压力测试吗?
- 4. 我们可以测试DeviceAnyWhere上的任何应用程序吗?
- 5. 我可以做Spotify应用程序的有限测试版吗?
- 6. 我可以切换Rails应用程序的测试框架吗?
- 7. 我可以使用Fit/Fitnesse来测试.NET应用程序吗?
- 8. 我可以从非gtest测试中检查gtest_filter吗?
- 9. 检查升压使用MinGW
- 10. 升压单元测试::可选
- 11. 在python中挤压测试以测试qt应用程序
- 12. 我可以测试使用Mockito自检的代码吗?
- 13. 升压测试应用程序初始化
- 14. 升压问题::测试
- 15. 单元测试php应用程序(我应该压力测试?)
- 16. Facebook API:我可以邀请测试用户加入我的应用程序吗?
- 17. 试图检测我的应用程序
- 18. 我可以使用Xcode的UI测试来检查推送通知吗?
- 19. 使用普通的JRE Junit测试可以测试Android应用程序吗?
- 20. 测试用于Mac的Web应用程序 - IPad可以吗?
- 21. 我如何测量iPhone应用程序的压力测试?
- 22. 我可以使用Xamarin测试记录器测试我的应用程序收到的推送通知吗?
- 23. 我们可以更改iOS应用程序进行升级吗?
- 24. 升压/输出到文件
- 25. rspec可以输出使测试失败的值吗?
- 26. 我可以使用MCP3008输出吗?
- 27. 升压测试用例函数取用户输入
- 28. ParseServer应用程序的压力测试
- 29. 我可以压缩Response.write吗?
- 30. 我可以在Qt-Creator中看到程序输出吗?
美丽,Space_C0wb0y。那么让我们看看我是否能够看到发生了什么。在cout_redirect构造函数中,我们设置了cout流缓冲区来提升输出测试流缓冲区。我们保存旧的cout流缓冲区。无论从cout中写入什么,直到cout_redirect被销毁,实际上都会被写入增强流缓冲区。当cout_redirect被破坏时,我们将cout流缓冲区重置为其先前的值,并且我们有一个带有所有我们想要的程序输出的增强流缓冲区。 – rturrado 2011-03-23 13:06:58
@rturrado:的确如此。 – 2011-03-23 13:08:08
我想,我们也可以做的是将增强流缓冲区设置为cout流缓冲区。在这种情况下,我们仍然会在cout中获得输出,并且我们可以使用增强流来检查它。 – rturrado 2011-03-23 13:09:07