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. 我可以在Junit測試中檢測泄漏的線程嗎?
- 5. 我可以做Spotify應用程序的有限測試版嗎?
- 6. 我們可以測試DeviceAnyWhere上的任何應用程序嗎?
- 7. 我可以切換Rails應用程序的測試框架嗎?
- 8. 我可以使用Fit/Fitnesse來測試.NET應用程序嗎?
- 9. 我可以使用硒webdriver測試iphone應用程序嗎?
- 10. 我可以從非gtest測試中檢查gtest_filter嗎?
- 11. 我可以在AppleTV上測試tvOS應用程序嗎?
- 12. 我可以在車上測試Android Auto應用程序嗎
- 13. 我可以禁用Elasticsearch 5.4中的引導程序檢查嗎?
- 14. 升壓單元測試::可選
- 15. 檢查升壓使用MinGW
- 16. PHP:我可以壓縮一個函數的輸出嗎?
- 17. 在python中擠壓測試以測試qt應用程序
- 18. 我可以測試使用Mockito自檢的代碼嗎?
- 19. 檢測升壓測試用例是否失敗
- 20. Facebook API:我可以邀請測試用戶加入我的應用程序嗎?
- 21. 升壓測試應用程序初始化
- 22. 單元測試php應用程序(我應該壓力測試?)
- 23. 升壓問題::測試
- 24. Visual Studio的Web性能測試可以用作Web場的壓力測試嗎?
- 25. 試圖檢測我的應用程序
- 26. 我可以使用Xcode的UI測試來檢查推送通知嗎?
- 27. 測試用於Mac的Web應用程序 - IPad可以嗎?
- 28. 使用普通的JRE Junit測試可以測試Android應用程序嗎?
- 29. 我可以從Selenium測試中得到我的應用程序代碼嗎?
- 30. 我可以使用gradle檢索測試數據依賴性嗎?
美麗,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