2016-12-11 3 views
0

모의 함수가있는 단위 테스트 코드가 있습니다 foo. 액션을 지정하기 위해 ON_CALL 구문을 사용하면 my_action을 수행하지 않고 foo 만 실행합니다.ON_CALL은 작동하지 않지만 EXPECT_CALL은 작동합니다.

ON_CALL(my_mock, foo(my_matcher())) 
.WillByDefault(DoAll(my_action(), Return(0))); 

그러나 내가 EXPECT_CALL을 실행하면 작동합니다. 필자의 경우 foo()는 한 번만 호출됩니다. 나는 그것이 어떻게 다를 수 있는지 보려고했습니다. 그러나 검색이나 stackoverflow 검색 도움이되지 않았다. 아래는 작동하는 EXPECT_CALL입니다.

EXPECT_CALL(my_mock, foo(my_matcher())) 
.WillOnce(DoAll(my_action(), Return(0))); 

동일한 my_matcher 및 my_action을 사용하면 어떻게 다른지 알 수 없습니다.

답변

0

ON_CALL은 기대 충족시 실행되는 기본 동작을 제공합니다. EXPECT_CALL에 정의 된 기대가 충족되지 않으면 ON_CALL에 정의 된 작업이 실행되지 않습니다. ON_CALL의 일반적인 사용 사례는 EXPECT_CALL에서 동일한 WillOnce/WillRepeatedly 개의 항목을 대체하는 것입니다. 스 니펫 작업을 수행하려면 다음과 같이 입력해야합니다.

ON_CALL(my_mock, foo(_)) 
    .WillByDefault(DoAll(my_action(), Return(0))); 
EXPECT_CALL(my_mock, foo(my_matcher())).Times(1); 
EXPECT_CALL(my_mock, foo(my_other_matcher())).Times(1); 
+0

감사합니다.하지만 제 질문에 답변하지 않았습니다. 두 경우 모두 동일한 입력으로 동일한 단위 테스트를 실행하기 때문에 기대치가 충족됩니다. EXP_CALL이 수행하는 동안 ON_CALL로 인해 my_action이 실행되지 않는 이유는 무엇입니까? – Gops

+0

내가 말했듯이'ON_CALL'은 호출에 의해 기대가 충족 될 때에 만 실행될 수 있습니다. 'EXPECT_CALL'을 정의하지 않으면 성취 할 것이 없습니다. – VladLosev

관련 문제