2009-12-09 58 views
0

我正在阅读关于Boost单元测试框架的this articleBoost单元测试和Visual Studio 2005/Visual C++和BOOST_AUTO_TEST_SUITE(stringtest)命名空间?

但是我有一点与第一例子麻烦,我的猜测是,他们漏掉了什么(东西将是显而易见的铁杆C++程序员)作为IBM经常在他们的文章呢。另一种可能性是我的Visual Studio 2005 C++编译器对于这个例子来说太老了。

#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() 

对我来说,BOOST_AUTO_TEST_SUITE和BOOST_AUTO_TEST_CASE线条看起来有些犯罪嫌疑人(特别是因为他们没有围绕参数报价和他们是不宣而标识符...但是这可能意味着他们是宏和我不能肯定我理解这个概念,或者在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 

是否有任何理由为什么这个代码将无法正常工作?

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 

回答

1

对我来说是正确的。我的Boost.Test代码看起来是一样的。我运行的是VS2008,但我知道它在2005年也可以运行。

好像你的问题不在于此。 如果您使用预编译头(和你为什么要做,在这样一个小的测试计划?),不应该stdafx.h中包含的文件中的第一件事情?

,什么是第一线?你似乎没有使用它,并且_MYSTRING是C++中的一个保留名称(所有以下划线开头且后跟大写字母的内容都是禁止的)

+0

将stdafx.h作为文件中的第一行真的好像清除了很多错误,现在只有一个: 1>正在链接... 1> LINK:致命错误LNK1104:无法打开文件'libboost_unit_test_framework-vc80-mt-gd-1_40.lib' – leeand00 2009-12-09 22:21:25

+0

文件libboost_unit_test_framework-vc80-mt-gd-1_40.lib确实位于我的C:\ Program Files文件(x86)\ boost \ boost_1_40 \ lib目录中。 – leeand00 2009-12-09 22:27:55

+0

并且将该路径添加到项目(或Visual Studio)链接器路径中? – jalf 2009-12-09 22:37:28