使用带有字符串而不是宽字符串的Visual Studio本机C++单元测试框架



是否有一种方法可以将Visual Studio本机C++单元测试框架配置为使用std::string而不是std::wstrings

Assert::Equal<class T>(const T & t1,const T &t2)

需要功能

template<class T> std::wstring ToSring<class T>(const T & t) /* note the wstring here */

由测试编写器为待测试对象(T类型(编写/专门化。我已经有了这个功能:

ostream & operator<<(ostream & o, const T & t) /* note the ostream vs wostream */

我想重复使用(在第三方窄字符串库上构建(,但我没有等效的wostream,也不想重写。

我有什么选择?

如果您的类确实有wostream方法,那么您对ToString的专门化可以简单地使用提供的宏RETURN_WIDE_STRING:

template<> static std::wstring ToString(const Foo &t) { RETURN_WIDE_STRING(t); }

但是,在不更改测试中的代码的情况下,您可以编写类似的宏(或函数(来将ostream转换为wstring,并以相同的方式使用它:

template<> static std::wstring ToString(const Foo &t) { RETURN_WIDE_FROM_NARROW(t); }

新的宏可能看起来像:

#define RETURN_WIDE_FROM_NARROW(inputValue) 
std::stringstream ss;
ss << inputValue;
auto str = ss.str();
std::wstringstream wss;
wss << std::wstring(str.begin(), str.end());
return wss.str();

您还可以通过使用不需要的Assert变体来避免整个ToString专业化问题:

Assert::IsTrue(t1 == t2, L"Some descriptive fail message");

不过,这可能需要同样多或更多的工作,这取决于您希望在失败消息中包含多少细节。

相关内容

  • 没有找到相关文章

最新更新