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