3

我有一个像这样的模拟课:

struct MockClass {
    MOCK_METHOD0(beginTransaction, void ());
    MOCK_METHOD0(doSomething, void ());
    MOCK_METHOD0(doSomethingElse, void ());
    MOCK_METHOD0(commit, void ());
};

我想测试是否beginTransaction()在调用doSomething()and之前被调用doSomethingElse(),并commit()在最后被调用。我是这样做的:

{
    InSequence s;
    EXPECT_CALL(*mockObject, beginTransaction());
    EXPECT_CALL(*mockObject, doSomething());
    EXPECT_CALL(*mockObject, doSomethingElse());
    EXPECT_CALL(*mockObject, commit());
}

这有效,但它过度指定了期望。我不关心 and 的顺序doSomething()doSomethingElse()beginTransaction()在开头commit()调用它,在最后调用它。有没有办法做到这一点?

4

1 回答 1

3

像这样的东西会起作用吗?不幸的是,我还不能测试它。

Expectation e1 = EXPECT_CALL(*mockObject, beginTransaction());
Expectation e2 = EXPECT_CALL(*mockObject, doSomething()).Times(AnyNumber()).After(e1);
Expectation e3 = EXPECT_CALL(*mockObject, doSomethingElse()).Times(AnyNumber()).After(e1);
EXPECT_CALL(*mockObject, commit()).After(e1, e2, e3);

这基本上说beginTransaction()必须调用,并且必须在任何其他调用之前发生。然后doSomething()anddoSomethingElse()可以被调用任意次数(包括 0 次)。最后,commit()必须在调用其他函数之后调用。

于 2013-10-29T14:59:21.553 回答