我有一个测试功能如下:
[TestMethod]
void RipMichaelJacksonTest()
{
string expected = "Hello";
BSTR actual = SysAllocString(L"Hello");
Assert::AreEqual(expected, actual);
}
assert
部分当然会失败。
我可以使用任何Assert功能吗? 我是VC ++的新手。
答案 0 :(得分:2)
问题是你正在做AreEqual
。传入两个参数将强制AreEqual(Object^, Object^)
:
验证两个指定的对象是否相等。如果对象不相等,则断言失败。
您实际需要的是wchar*
和char*
的比较。两者之间没有直接比较功能,因此有必要将string
转换为wstring
。有很多如何做到这一点的例子,例如:https://stackoverflow.com/a/7159944/2642059,你需要做类似的事情,例如:
wstring get_wstring(const string& s) {
wstring buf;
const char* cs = s.c_str();
const size_t wn = mbsrtowcs(nullptr, &cs, 0, nullptr);
if (wn == string::npos) {
cout << "Error in mbsrtowcs(): " << errno << endl;
} else {
buf.resize(wn + 1);
if(mbsrtowcs(&*buf.begin(), &cs, wn + 1, nullptr) == string::npos) {
cout << "Error in mbsrtowcs(): " << errno << endl;
buf.resize(0);
}
}
return buf;
}
get_wstring(expected)
和actual
的返回现在都是wchar
s,因此可以在使用中AreEqual(String^, String^, bool)
进行比较