2

这样做更方便的方法是什么:

EXPECT_EQ(mock->params.size(), 2);
EXPECT_EQ(mock->params[0], "firstCall");
EXPECT_EQ(mock->params[1], "secondCall");

上面的一个问题是,在进行测试驱动开发时,测试用例会崩溃,其中 mock->params 的大小将首先为零,然后再编写实际的测试代码。

顺便说一句,我不允许使用 GoogleMock,因为它需要某些我无法使用的编译器标志。我可以使用std和boost。

4

3 回答 3

4

您可以尝试使用Boost.Assign。例如,list_of序列可以与向量进行比较:

现场演示

#include <iostream>
#include <ostream>
#include <vector>
#include <boost/assign/list_of.hpp>
using namespace std;
using namespace boost::assign;

int main()
{
    vector<int> v;
    v.push_back(0);
    v.push_back(1);
    cout << (v == list_of(0)(1) ) << endl;
    cout << (v == list_of(1) ) << endl;
    cout << (v == list_of(1)(2) ) << endl;
}

输出是:

1
0
0
于 2012-11-01T14:35:08.607 回答
0

不是一个班轮,但应该做你想做的事:

std::vector<std::string> expected;
expected.push_back("firstCall");
expected.push_back("secondCall");
EXPECT_EQ(mock->params,expected);

否则,我建议使用ASSERT_EQ()第一个测试来防止您的测试用例崩溃,正如@Rook 在他的评论中所说的那样(这就是它的设计目的)。

更新: 使用 Boost Assign 作为@Evgeny Panasyuk 的回答表明它应该是这样的:

EXPECT_EQ(mock->params,list_of("firstCall")("secondCall"));

如果我正确理解了这一点(从答案中看不太清楚,而且我个人从未使用过它)。

于 2012-11-01T14:48:53.560 回答
0

您可以使用Google Mock(Google Mock 是 Google Test 的配套模拟框架)丰富的匹配器库来编写清晰的测试断言:

#include <gtest.h>
#include <gmock.h>

using testing::ElementsAre;

TEST(Foo, Bar) {
  EXPECT_THAT(mock->params, ElementsAre("firstCall", "secondCall"));
}

当违反测试条件时,该断言也会产生明确的信息。

于 2012-11-02T02:31:50.510 回答