저는 대부분 GoogleMock에서 주문한 기대를 사용하고 있습니다. 따라서 EXPECT_CALL
은 모두 testing::InSequence
개체의 범위 내에 작성되었습니다.Google Mock : 전체 주문보다 기대의 부분적인 주문이 더 까다로운 이유는 무엇입니까?
이제 나는 순서를 풀어서 기대를 2 개의 순서로 나눕니다. 테스트가 통과해야한다고 말 하겠지만, 실패했습니다. 충족되지 않은 전제 조건에 대해 불만을 토로합니다. 이것에 대해 어떻게 생각해야합니까?
편집 : 내 코드의 감소 버전 다음 INSEQUENCE가 for
루프 안에 중첩되어있는 경우
//InSequence s; // uncomment this and it works
for (int i = 1; i <= 2; ++i)
{
{
//InSequence s; // uncomment this and it doesn't work
EXPECT_CALL(mock1, produceMessage(_))
.WillOnce(DoAll(SetArgReferee<0>(val1), Return(false)))
.WillOnce(DoAll(SetArgReferee<0>(val2), Return(false)))
.WillOnce(DoAll(SetArgReferee<0>(val2), Return(false)));
EXPECT_CALL(mock2, handleEvent(A<MyType>()));
EXPECT_CALL(mock2, handleMessage(NotNull()));
}
}
그래서, 난 때 INSEQUENCE 경우에 비해, 편안한 요구하는 부분 순서를 가져야한다 바깥에있다.
오류가 나는군요 :
Mock function called more times than expected - returning default value.
Function call: handleMessage(0xd7e708)
Returns: false
Expected: to be called once
Actual: called twice - over-saturated and active
와 다음, 테스트의 끝에서 다음 GoogleMock 학습 곡선에 좀 더 진행 한 후
Actual function call count doesn't match EXPECT_CALL(mock2, handleMessage(NotNull()))...
Expected: to be called once
Actual: never called - unsatisfied and active
몇 가지 예제 코드를 작성할 수 있습니까? –
이 코드를 추가했습니다. – haelix
추가 설명 : 3 번째 기대에'.RetiresOnSaturation()'을 추가하면 부분 주문 케이스가 수정됩니다. 하지만 내 실제 사례는 더 복잡합니다. – haelix