में की तरह:क्या मैं अपने प्रोग्राम के आउटपुट को बूस्ट टेस्ट के साथ देख सकता हूं?
void f()
{
cout << "blah" << endl;
}
BOOST_AUTO_TEST_CASE(f)
{
f();
// This would be a beauty
// BOOST_CHECK_PROGRAM_OUTPUT_MATCH("blah");
}
में की तरह:क्या मैं अपने प्रोग्राम के आउटपुट को बूस्ट टेस्ट के साथ देख सकता हूं?
void f()
{
cout << "blah" << endl;
}
BOOST_AUTO_TEST_CASE(f)
{
f();
// This would be a beauty
// BOOST_CHECK_PROGRAM_OUTPUT_MATCH("blah");
}
हाँ, आप इसे एक boost::test_tools::output_test_stream
है, जो उत्पादन की तुलना करने के विशेष तरीके प्रदान करने के लिए std::cout
पुनः निर्देशित द्वारा कर सकते हैं। यह सुनिश्चित करने के लिए कि 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()
मैंने कुछ दिनों के लिए @ Björn Pollex के उत्तर का पालन किया है। लेकिन एक दिन मैंने पाया कि ऐसा करने के लिए यह आवश्यक नहीं है। बस 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 पढ़ें।
सुंदर, Space_C0wb0y। तो देखते हैं कि क्या मुझे वहां क्या हो रहा है। Cout_redirect कन्स्ट्रक्टर में हम आउटपुट टेस्ट स्ट्रीम बफर को बढ़ावा देने के लिए cout स्ट्रीम बफर सेट करते हैं। और हम पुराने कोउट स्ट्रीम बफर को बचाते हैं। कोउट में जो कुछ भी लिखा गया है, और जब तक cout_redirect नष्ट हो जाता है, वास्तव में बूस्ट स्ट्रीम बफर में लिखा जाता है। जब cout_redirect नष्ट हो जाता है, तो हम अपने पिछले मान पर कोउट स्ट्रीम बफर रीसेट करते हैं, और हमारे पास हमारे इच्छित प्रोग्राम आउटपुट के साथ बूस्ट स्ट्रीम बफर होता है। – rturrado
@rturrado: बिल्कुल। –
मुझे लगता है, हम स्ट्रीम बफर को बढ़ावा देने के लिए बूस्ट स्ट्रीम बफर सेट करने के लिए भी क्या कर सकते हैं। उस स्थिति में, हम अभी भी कोउट में आउटपुट प्राप्त करेंगे, और हम बूस्ट स्ट्रीम का उपयोग करके इसे जांचने में सक्षम हो सकते हैं। – rturrado