【发布时间】:2015-08-03 22:47:00
【问题描述】:
我正在尝试为具有私有向量的类编写一个模拟,它将数据插入到私有向量中。但是,我没有看到使用 Google Mock 的方法。理想情况下,我不想在我的界面中包含任何与测试相关的内容。另外,我不想让私有向量受保护并子类化该类并添加访问器方法,因为这会导致我的代码泄漏其实现。
这是我目前所拥有的。我想要完成的是使用 Fake 类插入数据,并使用 Mock 类在指向 Fake 类的指针上调用 Real::first() (这样我就可以使用 Fake 的向量而不是 Real 的)。编译此程序时,返回 -1 而不是 4。
#include <iostream>
#include <vector>
#include <gmock/gmock.h>
using namespace std;
//using ::testing::_;
using ::testing::Invoke;
class A {
protected:
vector<int> a;
public:
virtual int first() = 0;
virtual ~A() {}
};
class Real : public A {
public:
virtual int first() {
cout << "size: " << a.size() << endl;
return a[0];
}
};
class Fake : public A {
public:
virtual void insert(int b) {
a.push_back(b);
cout << a.size() << endl;
}
private:
virtual int first() { return -1; }
};
class Mock : public A {
public:
Mock(Fake* c) :
c_(c) {}
MOCK_METHOD0(first, int());
void delegate() {
ON_CALL(*this, first())
.WillByDefault(Invoke((Real*)c_, &Real::first));
}
private:
Fake* c_;
};
int main(void) {
Fake c;
c.insert(4);
Mock z(&c);
z.delegate();
cout << z.first() << endl;
return 0;
}
有谁知道我做错了什么?还是有更简单的方法来实现这一点?
【问题讨论】:
标签: c++ unit-testing mocking googlemock