c++ - Boost 单元测试和 Visual Studio 2005/Visual C++ 以及 BOOST_AUTO_TEST_SUITE(stringtest) 命名空间?

标签 c++ visual-studio unit-testing visual-studio-2005 boost

我正在阅读 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/

相关文章:

c++ - OpenCv 3d拼接全景图

visual-studio - 由于不同的病毒扫描程序导致 Microsoft Visual Studio 速度变慢

git - 一个解决方案有多个 Git 存储库

typescript - Bazel 抛出 "Module ts-jest in the transform option was not found"的 Jest 测试

c# - MVC4 单元测试 NSubstitute 找不到要返回的调用

c++ - STL 容器和不可复制(和不可移动)的对象

c++ - 我不小心调用了一个没有自己的类对象的成员函数。但这是如何工作的?

c++ - 读取文件时宏定义的有效方法?

c++ - 如何使用opencv和c++从视频文件中每秒捕获图像?

javascript - 在 watch 破坏测试中使用 Jasmine 形式有效性进行 AngularJS 单元测试