J'utilise Adobe Alchemy dans un projet utilisant UnitTest++. Les tests unitaires sont exécutés dans le cadre du processus de construction.Alchemy et UnitTest ++ fonctionnent ensemble
Il s'avère que UnitTest ++ dépend d'une fonctionnalité de C++ isn't implemented in Alchemy, à savoir l'instanciation des classes statiques et/ou des fonctions d'appel pour initialiser les variables globales. La meilleure chose à propos de UnitTest ++ est que vous n'avez pas à vous souvenir d'ajouter vos tests à la liste des tests à exécuter. Cela arrive automatiquement en utilisant de la magie pour créer des classes de cas de test et les ajouter à une liste globale de tests. Donc ceci:
TEST(MyTest) {
CHECK(doSomething());
}
devient ceci:
class TestMyTest : public UnitTest::Test {
...
} testMyTestInstance;
UnitTest::ListAdder adderMyTest(UnitTest::Test::GetTestList(), &testMyTestInstance);
où le constructeur de ListAdder
ajoute testMyTestInstance
à la liste globale des tests. Le problème est qu'à cause du bogue d'Alchemy, le constructeur ListAdder
ne s'exécute jamais, donc la liste des tests est toujours vide.
Pour prouver que le constructeur est ListAdder
ne s'appelle, vous pouvez l'instrument à planter quand il est appelé:
ListAdder::ListAdder(TestList& list, Test* test) {
int *p= (int*)INT_MAX; // NULL won't crash alchemy (!)
*p= 0; // boom
list.Add(test);
}
Cela va planter lors de la compilation en mode natif, mais ne sera pas si compilé avec l'alchimie.
Une façon moins radicale de le voir est d'ajouter juste un printf:
ListAdder::ListAdder(TestList& list, Test* test) {
printf("ListAdder %s \n", test->m_details.testName);
list.Add(test);
}
Lors de la compilation en mode natif, vous verrez « ListAdder ... » pour chaque test, mais lorsqu'il est compilé sous Alchemy il a gagné N'imprime rien.
Ma question est: comment puis-je modifier UnitTest ++ pour que les tests puissent être exécutés? Les solutions de contournement described here ne semblent pas s'appliquer.