Bonjour,

Je voudrais savoir s'il est possible d'utiliser boost::bind dans le cadre de CppUnit.

Au lieu de faire
J'utilise le code suivant (qui marche)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
std::string const name = "test";
context.addTest(new CPPUNIT_NS::TestCaller<TestFixtureType>( context.getTestNameFor(name), &TestFixtureType::Test::test, context.makeFixture()));
avec la classe

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Test : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(Test);  	
CPPUNIT_TEST_SUITE_ADD_CUSTOM_TESTS(addTests);
CPPUNIT_TEST_SUITE_END();
 
...
 
static void addTests(CPPUNIT_NS::TestSuiteBuilderContext<TestFixtureType> & context)
{
	std::string const name = "test";
	context.addTest(new CPPUNIT_NS::TestCaller<TestFixtureType>(context.getTestNameFor(name), &TestFixtureType::Test::test, context.makeFixture()));
}
 
void test() {...}
 
void test2(int val) {...}
};
Mais j'aurais voulu faire la même chose en passant par boost::bind.

Donc j'espérais naïvement faire quelque chose comme ça dans addTests

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
std::string const name = "test";
context.addTest(new CPPUNIT_NS::TestCaller<TestFixtureType>(context.getTestNameFor(name), boost::bind(&TestFixtureType::Test::test, _1), context.makeFixture())
Bon évidemment ça ne marche pas. En fait, je ne sais pas quoi mettre à la place du placeholder _1. Peut-être "context.makeFixture()" ?

Sinon j'ai essayé comme ça

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
std::string const name = "test";
typedef void (TestFixtureType::* Method)();
boost::function1<void, TestFixtureType*> function = boost::bind(&TestFixtureType::Test::test, context.makeFixture());
Method method = *function.target<Method>();
context.addTest(new CPPUNIT_NS::TestCaller<TestFixtureType>(context.getTestNameFor(name), method, context.makeFixture()));
Le but c'est d'ensuite ajouter des tests avec la méthode "test2" en faisant varier val.

Flo.