:Programımın çıkışını yükseltme testi ile kontrol edebilir miyim? olduğu gibi
void f()
{
cout << "blah" << endl;
}
BOOST_AUTO_TEST_CASE(f)
{
f();
// This would be a beauty
// BOOST_CHECK_PROGRAM_OUTPUT_MATCH("blah");
}
:Programımın çıkışını yükseltme testi ile kontrol edebilir miyim? olduğu gibi
void f()
{
cout << "blah" << endl;
}
BOOST_AUTO_TEST_CASE(f)
{
f();
// This would be a beauty
// BOOST_CHECK_PROGRAM_OUTPUT_MATCH("blah");
}
Evet, çıktıyı karşılaştırmak için özel yöntemler sağlayan bir boost::test_tools::output_test_stream
e std::cout
yönlendirerek yapabilirsiniz. std::cout
'un her zaman doğru şekilde geri yüklendiğinden emin olmak için, aşağıdaki örnekte gösterildiği gibi özel bir yapı kullanabilirsiniz.
#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()
Bazı günlerde Björn Pollex'in yanıtını takip ettim. Ama bir gün bunu böyle yapmak için gerekli olmadığını buldum. Sadece boost::test_tools::output_test_stream
kullanın.
#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()
Daha fazla bilgi için, the official documentation'u okuyun.
Güzel, Space_C0wb0y. O zaman orada neler olup bittiğini görelim. Cout_redirect yapıcısında, çıkış testi akışı arabelleğini artırmak için cout akış arabelleğini belirleriz. Ve eski cout stream buffer'ını kurtarıyoruz. Cout_redirect yok edilene kadar, oradan ne yazılırsa yazılsın, aslında boost akım tamponuna yazılır. Cout_redirect imha edildiğinde, cout stream buffer'ı önceki değerine sıfırlarız ve istediğimiz tüm program çıktısına sahip bir boost akışı tamponuna sahibiz. – rturrado
@rturrado: Kesinlikle. –
Sanırım, aynı zamanda, akıntı akış tamponunu cout akış tamponuna ayarlamak için yapabileceğimiz şey. Bu durumda, yine de cout'ta çıktı alırdık ve boost akımını kullanarak bunu kontrol edebilirdik. – rturrado