gmock:返回每个模拟调用的不同值

时间:2014-05-05 19:44:59

标签: c++ googletest googlemock

假设:

struct MockThis : public IMocker {
    MOCK_METHOD0(ReturnThis, std::string());
};

我在这个对象上设置了一个ON_CALL,所以它返回一个默认值,但是假设我希望ReturnThis在我的特定测试中为每次调用返回一个不同的字符串,我该如何实现呢?

1 个答案:

答案 0 :(得分:1)

你可以考虑做这样的事情:

struct MockThis : public IMocker {
    MOCK_METHOD0(ReturnThis, std::string());

    MockThis() {
        ON_CALL(*this, ReturnThis())
            .WillByDefault(Invoke(&real_, &MockThis ::ReturnStringVariations));
    }

protected:
    static std::string randomStrings[10];


    std::string ReturnStringVariations() {
        // Return some string on either random conditions, or calls counted, etc.
        unsigned int strIndex = std::rand() % 10;
        return randomStrings[strIndex];
    }
};

std::string MockThis::randomStrings[10] = {
    "Random string 1" ,
    // ...
    "Random string 10"
}; 

要从预定义数组生成字符串(如上所示),格式化的变体或其他内容,您可以考虑使用c++11 pseudo-random-numbers功能中的某些内容。