我正在阅读 this article在 Boost 单元测试框架上。
但是我在第一个示例中遇到了一些麻烦,我的猜测是他们遗漏了一些东西(对于硬核 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
最佳答案
在我看来是正确的。我的 Boost.Test 代码看起来是一样的。我正在运行 VS2008,但我知道它在 2005 中也能正常工作。
看来您的问题出在其他地方。 如果您使用预编译头文件(为什么要在这么小的测试程序中这样做?),难道不应该将 stdafx.h 作为文件中的第一部分包含在内吗?
第一行是做什么用的?您似乎没有使用它,并且 _MYSTRING
是 C++ 中的保留名称(以下划线开头后跟大写字母的所有内容都是禁止使用的)
关于c++ - Boost 单元测试和 Visual Studio 2005/Visual C++ 以及 BOOST_AUTO_TEST_SUITE(stringtest) 命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1876444/