2009-12-09 6 views
0

Je lis this article sur le Boost Unit Testing Framework.Boost Unit Testing et Visual Studio 2005/Visual C++ et l'espace de noms BOOST_AUTO_TEST_SUITE (stringtest)?

Cependant, j'ai un peu de mal avec le premier exemple, je suppose qu'ils ont laissé quelque chose (quelque chose qui serait évident pour les codeurs hardcore C++) comme le fait souvent IBM dans leurs articles. Une autre possibilité est que mon compilateur Visual Studio 2005 C++ est trop ancien pour l'exemple.

#include "stdafx.h" 
#define BOOST_TEST_MODULE stringtest 
#include <boost/test/unit_test.hpp> 
//#include "mystring.h" 

BOOST_AUTO_TEST_SUITE(stringtest) // name of the test suite is stringtest 

BOOST_AUTO_TEST_CASE(test1) 
{ 
    /* 
    mystring s; 
    BOOST_CHECK(s.size() == 0); 
    */ 
    BOOST_CHECK(0 == 0); 
} 

BOOST_AUTO_TEST_CASE(test2) 
{ 
    /* 
    mystring s; 
    s.setbuffer("hello world"); 
    BOOST_REQUIRE_EQUAL('h', s[0]); // basic test 
    */ 
    BOOST_CHECK(0 == 0); 
} 

BOOST_AUTO_TEST_SUITE_END() 

Pour moi, les BOOST_AUTO_TEST_SUITE et les lignes BOOST_AUTO_TEST_CASE regarder un peu suspect (d'autant plus qu'ils ne disposent pas des guillemets autour des arguments, et ils sont des identificateurs non déclarés ... mais cela signifie probablement qu'ils sont des macros et je suis pas certain que je comprends le concept ou si tel est disponible en VC++ 8.0) ...

#ifdef _MYSTRING 
#define _MYSTRING 

class mystring { 
    char* buffer; 
    int length; 
    public: 
     void setbuffer(char* s) { buffer s = s; length = strlen(s); } 
     char& operator[ ] (const int index) { return buffer[index]; } 
     int size() {return length; } 
} 

#endif 

y at-il des raisons pour lesquelles ce code ne fonctionne pas?

1>c:\users\andy\documents\visual studio 2005\projects\unittesttests\unittesttests\unittesttests.cpp(7) : error C2065: 'stringtest' : undeclared identifier 
1>c:\users\andy\documents\visual studio 2005\projects\unittesttests\unittesttests\unittesttests.cpp(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>c:\users\andy\documents\visual studio 2005\projects\unittesttests\unittesttests\unittesttests.cpp(9) : error C2146: syntax error : missing ';' before identifier 'BOOST_AUTO_TEST_CASE' 
1>c:\users\andy\documents\visual studio 2005\projects\unittesttests\unittesttests\unittesttests.cpp(9) : error C2065: 'test1' : undeclared identifier 
1>c:\users\andy\documents\visual studio 2005\projects\unittesttests\unittesttests\unittesttests.cpp(10) : error C2448: 'BOOST_AUTO_TEST_CASE' : function-style initializer appears to be a function definition 
1>c:\users\andy\documents\visual studio 2005\projects\unittesttests\unittesttests\unittesttests.cpp(18) : error C2065: 'test2' : undeclared identifier 
1>c:\users\andy\documents\visual studio 2005\projects\unittesttests\unittesttests\unittesttests.cpp(19) : error C2448: 'BOOST_AUTO_TEST_CASE' : function-style initializer appears to be a function definition 
1>c:\users\andy\documents\visual studio 2005\projects\unittesttests\unittesttests\unittesttests.cpp(29) : fatal error C1004: unexpected end-of-file found 

Répondre

1

Cela me semble correct. Mon code Boost.Test ressemble de la même manière. Je cours VS2008, mais je sais que cela fonctionne aussi en 2005.

On dirait que votre problème est ailleurs. Si vous utilisez des en-têtes précompilés (et pourquoi faites-vous cela dans un si petit programme de test?), Stdafx.h ne devrait-il pas être inclus comme la toute première chose dans le fichier?

Et à quoi sert la première ligne? Vous ne semblez pas l'utiliser, et _MYSTRING est un nom réservé en C++ (tout ce qui commence par un trait de soulignement suivi d'une majuscule est interdit)

+0

Mettre en évidence que stdafx.h était la première ligne du fichier effacer beaucoup d'erreurs, maintenant il est à un seul: 1> Liaison ... 1> LINK: erreur fatale LNK1104: impossible d'ouvrir le fichier 'libboost_unit_test_framework-vc80-mt-gd-1_40.lib' – leeand00

+0

Le fichier libboost_unit_test_framework-vc80-mt-gd-1_40.lib est en effet situé dans mon répertoire C: \ Program Files (x86) \ boost \ boost_1_40 \ lib. – leeand00

+0

Et ce chemin est-il ajouté au chemin de liaison du projet (ou du studio visuel)? – jalf

Questions connexes