用字符串断言BSTR

时间:2015-10-09 10:40:34

标签: c++ unit-testing visual-c++ assert

我有一个测试功能如下:

    [TestMethod]
    void RipMichaelJacksonTest()
    {
        string expected = "Hello";
        BSTR actual = SysAllocString(L"Hello");
        Assert::AreEqual(expected, actual);
    }

assert部分当然会失败。

我可以使用任何Assert功能吗? 我是VC ++的新手。

1 个答案:

答案 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)进行比较