don*_*ner 3 c++ unit-testing pointers googletest googlemock
我刚刚开始使用 GoogleTest 和 GoogleMock。阅读“for dummies”文档,该示例测试了一个Painter依赖于以下内容的类Turtle:
真实对象 - Turtle.h
class Turtle {
public:
virtual ~Turtle() {}
virtual void PenDown() = 0;
};
Run Code Online (Sandbox Code Playgroud)
模拟对象-mock-turtle.h
class MockTurtle : public Turtle {
public:
MOCK_METHOD0(PenDown, void());
};
Run Code Online (Sandbox Code Playgroud)
测试中的代码 - Painter.h
class Painter {
public:
Painter(Turtle *turtle){};
};
Run Code Online (Sandbox Code Playgroud)
单元测试 - test_painter.cpp
这是为了测试该turtle.PenDown()方法是否是从Painter构造函数中调用的。
TEST(PainterTest, CanDrawSomething) {
MockTurtle turtle;
EXPECT_CALL(turtle, PenDown())
.Times(AtLeast(1));
Painter painter(&turtle);
}
Run Code Online (Sandbox Code Playgroud)
该测试正确失败,因为PenDown()从未被调用。
但是,如果我将测试更改为使用取消引用的指针,则会错误地MockTurtle通过。
TEST(PainterTest, CanDrawSomething) {
MockTurtle *turtle = new MockTurtle();
EXPECT_CALL(*turtle, PenDown())
.Times(AtLeast(1));
Painter painter(turtle);
}
Run Code Online (Sandbox Code Playgroud)
为什么使用取消引用的指针时此测试能够通过?我的代码中没有任何地方被PenDown()调用。
对于更多上下文,我想使用一个指针,MockTurtle以便我可以在测试装置中初始化它,以便其他测试可以使用它。
| 归档时间: |
|
| 查看次数: |
1408 次 |
| 最近记录: |