我可以将BOOST_TEST_CASE用于非静态类成员函数吗?

时间:2014-01-17 10:28:09

标签: c++ boost boost-test

我现在使用BOOST :: UNIT_TEST框架来执行单元测试,它是执行单元测试的好工具。但是,我发现了一些不方便的东西:当我添加函数进行测试时,似乎函数必须是静态函数或自由函数,如下面的代码所示:

test_suite* ts = BOOST_TEST_SUITE( "unit_test" );

ts->add(BOOST_TEST_CASE(&static_fun));

当它不是静态函数时,例如,

class Abc
{
  public:
    void myfun();

};

Abc obj;
ts->add(BOOST_TEST_CASE(&(obj.myfun))); 

然后,我会遇到C2064: term does not evaluate to a function taking 0 arguments错误。我是否可以将非静态类成员函数添加到测试框架?感谢

2 个答案:

答案 0 :(得分:2)

我想你试着定义一个测试夹具类?在大多数情况下,我使用boost测试的方式如下所示:

struct MyTestFixture
{
   int test_data;
   void func() 
   {
       // some common test code
   }
};

BOOST_FIXTURE_TEST_SUITE(MyTest, MyTestFixture)

BOOST_AUTO_TEST_CASE(Test1)
{
    test_data = 3;
    func();
    // ...
}

BOOST_AUTO_TEST_CASE(Test2)
{
    // ...
}

BOOST_AUTO_TEST_SUITE_END()

答案 1 :(得分:1)

你应该看here 在这种情况下,您可以使用boost::bind

ts->add(BOOST_TEST_CASE(boost::bind(&Abc::myfun, obj)));