【问题标题】:Using Boost::Test for parallel code使用 Boost::Test 进行并行代码
【发布时间】:2012-04-23 18:42:38
【问题描述】:

我想用 boost::unit_test 为我的并行(基于 mpi)C++ 代码创建一些测试。我有一些使用测试框架的基本经验。对我来说,主要问题是,在处理并行代码时,将 MPI::Init 放在哪里,以便首先调用它。在我创建的测试套件中,没有主要功能。此外,当某些断言在现有等级的子集上失败时,Boost::Test 是否正确存在(相对于 mpi)?

【问题讨论】:

    标签: c++ unit-testing boost mpi


    【解决方案1】:

    Boost Test 有fixture support,它允许您针对每个测试用例、测试套件或全局执行设置/清理。听起来您应该在全局装置中调用MPI::Init

    struct MPIFixture {
        MPIFixture() { MPI::Init(); }
        ~MPIFixture() { /* I bet there's a deinit you should call */ }
    };
    
    BOOST_GLOBAL_FIXTURE(MPIFixture);
    

    如果您在使用它时遇到问题,或者您正在使用提供自己的main 函数的框架,那么您可以在包含 Boost 标头之前#define BOOST_TEST_NO_MAIN。然后您可以自己调用boost::unit_test::unit_test_main 来运行您的测试套件。

    【讨论】:

    • Fixtures 不起作用,因为 MPI::Init 需要命令行参数。您的第二个建议解决了问题!对我来说,stackoverflow.com/q/963158/1326595 的帖子在这种情况下也很有用。
    • 您实际上可以通过 framework::master_test_suite() 接口访问全局夹具中的命令行参数。
    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2010-09-21
    • 2020-11-05
    • 2020-05-16
    相关资源
    最近更新 更多