【问题标题】:Assert a BSTR with string用字符串断言 BSTR
【发布时间】:2015-10-09 10:40:34
【问题描述】:

我有一个测试功能如下:

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

assert 部分当然会失败。

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

【问题讨论】:

  • 嗯,字符串不相等。
  • 问题不清楚。 “我可以使用任何断言功能吗?”您已经在使用一个。
  • @user1 认为Assert 不正确。 Assert::AreEqual 无法将BSTR 作为参数
  • 这是这个 C++/CLR?如果是这样,你应该这样标记它。

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


【解决方案1】:

问题是你正在做一个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 的返回现在都将是 wchars,因此可以在使用 AreEqual(String^, String^, bool) 时进行比较

【讨论】:

    猜你喜欢
    • 2012-09-19
    • 2011-12-04
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    相关资源
    最近更新 更多