development

Google Mock은 좋은 조롱 프레임 워크입니까?

big-blog 2020. 11. 28. 09:46
반응형

Google Mock은 좋은 조롱 프레임 워크입니까?


저는 회사에서 단위 테스트 노력을 선도하고 있으며 사용할 모의 프레임 워크를 선택해야합니다. 이전에 조롱 프레임 워크를 사용한 적이 없습니다. 우리는 이미 Google Test를 선택 했으므로 Google Mock을 사용하는 것이 좋습니다. 그러나 Google Mock의 튜토리얼을 본 후의 첫 인상 은 다음과 같습니다.

  • MOCK_METHODn 매크로를 사용하여 모의 클래스에서 각 메서드를 다시 선언해야하는 필요성은 불필요 해 보이며 DRY 원칙에 위배되는 것 같습니다.
  • 이들의 매처 (예 : EXPECT_CALL (turtle, Forward (_));의 '_')와 매칭 순서가 너무 강력 해 보입니다. 예를 들어, 당신이 의미하지 않는 것을 말하고 그런 식으로 버그를 놓치기 쉽습니다.

나는 구글 개발자들에 대해 높은 신뢰를 갖고 있으며, 이전에 사용해 본 적이없는 모의 프레임 워크를 판단하는 내 자신의 능력에 대해서는 낮은 신뢰를 가지고 있습니다. 그래서 제 질문 은 이것이 유효한 문제입니까?

아니면 모의 객체를 정의하는 더 좋은 방법이 없으며 매 처가 실제로 사용하기에 직관적입니까? 이전에 Google Mock을 사용해 본 사람의 답변에 감사 드리며 다른 C ++ 프레임 워크와의 비교가 도움이 될 것입니다.


자주 사용합니다.

비교적 쉬운 일을하는 것은 사소한 일이며 매우 어려운 일을 할 수 있습니다. 이것이 제가 프레임 워크에서 원하는 것입니다.

구글의 모의로 커스텀 매처 (그리고 다른 것들)를 작성하는 데있어서 가장 어려운 부분은 구글의 모의가 아니라 C ++의 템플릿 오류입니다 ... 파싱이 거의 불가능합니다. 나는 종종 덜 복잡한 표현으로 작업 표현을 점진적으로 작성하여 복잡한 표현을 작성합니다. 이렇게하면 템플릿 오류를 쉽게 찾아 낼 수 있습니다.

나는 C ++ 조롱에 대한 더 나은 옵션을 보지 못했으며 Google은 많은 근거를 다루고 있으므로 한 번 시도해 보는 것이 좋습니다.

WRT DRY 원칙, 나는 mocked 메소드를 선언하는 것이 불행하다는 데 동의하지만, 반사가 없으면 C ++가 그렇지 않으면 많은 행운을 가질 것이라고 확신하지 못합니다. 나는 방법이 있다면 googlemock이 그것을 사용할 것이라고 확신합니다.)

BTW : googlemock 요리 책 은 좋은 참고 자료입니다.


Fake-It 은 C ++를위한 간단한 모의 프레임 워크입니다. FakeIt은 최신 C ++ 11 기능을 사용하여 표현적인 (아직 매우 간단한) API를 만듭니다. FakeIt을 사용하면 메서드를 다시 선언하거나 각 모의 객체에 대해 파생 클래스를 만들 필요가 없습니다. 가짜 방법은 다음과 같습니다.

struct SomeInterface {
  virtual int foo(int) = 0;
};

// That's all you have to do to create a mock.
Mock<SomeInterface> mock; 

// Stub method mock.foo(any argument) to return 1.
When(Method(mock,foo)).Return(1);

// Fetch the SomeInterface instance from the mock.
SomeInterface &i = mock.get();

// Will print "1"
cout << i.foo(10);

탐색 할 더 많은 기능이 있습니다. 가서 한번 시도해 .


면책 조항 : 나는 HippoMocks를 썼습니다.

다른 조롱 프레임 워크를 살펴 보는 것이 좋습니다. 자신을 반복하지 않는 클래스가 있습니다. 또한 일치를위한 새로운 구문을 제거하여 코드를 영어와 결합 된 C ++와 훨씬 비슷하게 만듭니다. 시도 해봐!

http://www.assembla.com/wiki/show/hippomocks


저는 몇 년 동안 전문적으로 googletest + googlemock을 사용해 왔으며 확실히 좋아합니다. 다른 사람들이 언급하지 않은 한 가지는 이미 googletest를 사용하기로 약속했다면 googlemock도 사용하는 것이 합리적이라는 것입니다. 그들은 상당히 잘 통합되어 있고 비슷한 디자인 스타일과 철학을 공유했습니다.

예를 들어, googlemock ASSERT_THAT()은 매우 유용하고 googletests의 어설 션과 잘 공존 하는 매크로를 제공 합니다.

그러나 나는 googlemock의 힘을 남용하는 것에 대해 경고합니다. 완전히 읽을 수없는 매우 복잡하고 강력한 매처를 작성하는 것은 매우 유혹적 일 수 있습니다 . 당신은 그것을 사용할 때 훈련을 받아야합니다.

다른 생각 :

  • Googlemock은 다소 가파른 학습 곡선을 가질 수 있습니다. 매처와 기대의 복잡성은 당신이 바라는 것만 큼 간단하지 않습니다.
  • DRY 위반에 대한 우려는 유효합니다. 모의가 쉽게 자동 생성 될 수있을 때 수동으로 정의해야하는 것은 성가신 일입니다. 팀이 인터페이스에 대한 googlemocks를 자동으로 정의하는 자체 코드 생성기를 작성하는 것은 매우 일반적입니다.

참고 URL : https://stackoverflow.com/questions/2827319/is-google-mock-a-good-mocking-framework

반응형