c++ - 在手动定义的套件树中 boost 测试用例和套件装置

标签 c++ unit-testing boost fixtures boost-test

在 Windows x86、Android TI 2.2 上使用 Boost 1.46.1

我已经定义了自己的测试套件树,因为我需要用户选择测试顺序。尽管我知道测试应该是独立的,但这是一项要求。使用我自己的 test_suite* init_unit_test_suite(int, char**) 实现重新定义了测试套件树。

对于自动化测试用例和自动化测试套件,有 Boost 宏:BOOST_FIXTURE_TEST_CASEBOOST_FIXTURE_TEST_SUITE( suite_name, F )。这些宏将函数注册到 framework::master_test_suite(),这在这种情况下是不受欢迎的行为。

全局 fixture (BOOST_GLOBAL_FIXTURE(fixure_name)) 在手动测试套件定义中不受影响。

我想在 Boost 单元测试框架中使用 fixture 来手动定义测试套件和用例。一种简洁的方式。

有一些解决方法:

  • 测试套件 fixture - 可以定义为第一个和最后一个测试 这是 child 套房/案例。然而,这会影响测试结果和 作为一个单独的测试,这并不是一个很好的解决方案。
  • 测试用例 fixture - 通过在测试用例周围包装一个作用域实例 功能。

对于我的问题,还有其他更干净、更好的解决方案吗?我真的没有资源来深入研究 Boost 库。另一方面,我不想显着降低我这边代码的质量和可读性。

问候,LK

#include <boost/bind.hpp>
#include <boost/smart_ptr.hpp>
#include <boost/test/unit_test.hpp>
using namespace boost::unit_test;

BOOST_GLOBAL_FIXTURE(GFixture);

test_suite* init_unit_test_suite( int, char** )
{
    test_suite* ts1 = BOOST_TEST_SUITE( "Suite1" );

    boost::shared_ptr<TestClass1> test1 ( new TestClass1 );
    ts1->add( BOOST_TEST_CASE( boost::bind(&TestClass1::Run, test1)));
    boost::shared_ptr<TestClass2> test2 ( new TestClass2 );
    ts1->add( BOOST_TEST_CASE( boost::bind(&TestClass2::Run, test2)));
    boost::shared_ptr<TestClass3> test3 ( new TestClass3);
    ts1->add( BOOST_TEST_CASE( boost::bind(&TestClass3::Run, test3)));

    framework::master_test_suite().add( ts1 );
    return 0;
}

单元测试框架:用户指南
http://www.boost.org/doc/libs/1_46_1/libs/test/doc/html/utf/user-guide.html

最佳答案

考虑以下代码:

#define BOOST_TEST_MAIN
#include <boost/test/included/unit_test.hpp>
#include <boost/test/unit_test_suite.hpp>

BOOST_GLOBAL_FIXTURE( ... );

BOOST_AUTO_TEST_SUITE( Suite1 )

    BOOST_AUTO_TEST_CASE( Test1 )
    {
        TestClass1 testClass;

        testClass.Run();
    }


    BOOST_AUTO_TEST_CASE( Test2 )
    {
        TestClass2 testClass;

        testClass.Run();
    }

    BOOST_AUTO_TEST_CASE( Test3 )
    {
        TestClassT testClass;

        testClass.Run();
    }

BOOST_AUTO_TEST_SUITE_END()

这足以执行测试。

关于c++ - 在手动定义的套件树中 boost 测试用例和套件装置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6902925/

相关文章:

c++ - boost::spirit::x3 中的通用解析器生成器

c++ - 从源代码构建 openCV 之前的步骤

c++ - 在类声明之外实现的 enable_if 方法特化

c++ - 在多线程程序中使用 std::cout 和 <iomanip> 时如何避免数据竞争?

ios - Xcode 5 : Multiple test targets in one scheme: "Simulator already in use"

c++ - typedef boost::shared_ptr<MyJob> Ptr;或者#define Ptr boost::shared_ptr

c++ - 在哪里放置 using 声明

ios - Quartz Core 干扰正在运行的单元测试

java - Spring Boot 单元测试配置

c++ - 在 MinGW 中使用 boost::asio::local