저는 GoogleTest와 GoogleMock을 시작했습니다. "for dummies" documentation 읽기의 예는 Turtle
에 의존하는 Painter
클래스 테스트 :역 참조 포인터를 사용할 때 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){};
};
단위 테스트 -이 작업은 turtle.PenDown()
방법은 Painter
생성자에서 호출 여부를 테스트하기위한 것입니다
test_painter.cpp.
TEST(PainterTest, CanDrawSomething) {
MockTurtle turtle;
EXPECT_CALL(turtle, PenDown())
.Times(AtLeast(1));
Painter painter(&turtle);
}
이 테스트는 PenDown()
이 호출되지 않기 때문에 올바르게 실패합니다.
그러나 역 참조 포인터를 사용하여 MockTurtle
으로 변경하면 이 잘못 입력됩니다.이 전달됩니다.
왜 역 참조 된 포인터를 사용할 때이 테스트가 통과합니까? 내 코드에 아무데도 PenDown()
이 호출됩니다.
자세한 내용은 MockTurtle
에 대한 포인터를 사용하여 다른 테스트에서 사용할 수 있도록 테스트 픽스처에서 초기화 할 수 있습니다.
최신 버전의 Google Test를 사용하고 있으며 예상대로 작동합니다. 최신 버전의 Google Test를 사용해보십시오 – Asesh
Google 테스트 (github에서 가져온 것)의 최신 버전을 사용하고 있습니다. 테스트 실행 파일을 만들기 위해 특별한 작업을하고 있습니까? 내 빌드 명령 :'g ++ -I googlemock/include -I googletest/include -I ../source -L googlemock -lgmock_main test_painter.cpp -o test_painter' – donturner
특별한 것은 없지만 Visual C++를 사용하며 두 테스트 모두 실패합니다. – Asesh