是否有一种方法可以将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");
不过,这可能需要同样多或更多的工作,这取决于您希望在失败消息中包含多少细节。