我剛開始使用GoogleTest和GoogleMock。讀"for dummies" documentation的示例測試一個Painter
類取決於一個Turtle
上:爲什麼使用取消引用的指針時,EXPECT_CALL測試意外通過?
實物 - Turtle.h
class Turtle {
public:
virtual ~Turtle() {}
virtual void PenDown() = 0;
};
模仿對象 - 模擬turtle.h
class MockTurtle : public Turtle {
public:
MOCK_METHOD0(PenDown, void());
};
測試中的代碼 - Painter.h
class Painter {
public:
Painter(Turtle *turtle){};
};
單元測試 - test_painter.cpp
這是爲了測試是否turtle.PenDown()
方法是從Painter
構造函數調用。
TEST(PainterTest, CanDrawSomething) {
MockTurtle turtle;
EXPECT_CALL(turtle, PenDown())
.Times(AtLeast(1));
Painter painter(&turtle);
}
該測試正確失敗,因爲PenDown()
永遠不會被調用。
但是,如果我更改測試使用取消引用指針MockTurtle
它不正確通過。
TEST(PainterTest, CanDrawSomething) {
MockTurtle *turtle = new MockTurtle();
EXPECT_CALL(*turtle, PenDown())
.Times(AtLeast(1));
Painter painter(turtle);
}
爲什麼使用取消引用的指針時該測試通過?在我的代碼中沒有任何地方是PenDown()
。
欲瞭解更多的上下文,我想使用一個指針MockTurtle
,以便我可以在測試夾具中初始化它,以便其他測試可以使用它。
我正在使用Google Test的最新版本,並且按預期工作。嘗試使用Google Test的最新版本 – Asesh
我也在使用最新版本的Google Test(從github取得)。你在做什麼特別的東西來構建你的測試可執行程我的構建命令是:'g ++ -I googlemock/include -I googletest/include -I ../source -L googlemock -lgmock_main test_painter.cpp -o test_painter' – donturner
沒什麼特別的,但我使用Visual C++,這裏兩個測試都失敗 – Asesh