내가 함께 일하고 있어요 코드는 다음과 같이 보입니다 지정 NIL "willReturn"반환과 함께 수업을 조롱하지 내 "MyBowl"객체의 메서드는 직접이 문제와 관련없는 이유로이 방법으로 수행해야합니다.OCMockito 오히려 값보다 내가
위의 메서드 내에서 [bowl getAnOrangeWithSize]가 특정 매개 변수와 함께 호출되고 있음을 테스트하려고합니다. 여기서는 MyBowl 클래스를 모의하고 싶습니다. 위의 메서드 만 테스트합니다. 또한 [bowl getAnOrangeWithSize] 호출이 MyOrange의 모의 객체를 반환하기를 원합니다.이 예제에서는 비교 목적으로 만 사용하지만, 잠재적으로 저는 위의 메서드에서 "orange"를 사용하고있을 수도 있습니다. & 테스트를 작성하고 싶습니다. 그것도.
테스트하려면이 종속성 (MyBowl mock)을 주입하고 다른 mocked 종속성 (MyOrange)을 주입해야합니다. 이 요구 사항을 여러 번 실행하고 리팩토링하여이 문제를 해결했지만이 경우에는 막혔습니다.
어쨌든,이 시험은 다음과 같습니다 -
- (void)testThatGetAnOrangeFromBowlIsReturningAValidOrange
{
MyOrange *mockOrange = mock([MyOrange class]);
MyBowl *mockBowl = mock([MyBowl class]);
[given([mockBowl getAnOrangeWithSize:@"large"]) willReturn:mockOrange];
MyOrange *returnedOrange = [sut getAnOrangeFromBowl:mockBowl withSize:@"large"];
assertThat(returnedOrange, is(equalTo(mockOrange)));
}
테스트가 실패, returnedOrange이 전무 때문이다. 코드에 중단 점을 넣으면 "getAnOrangeWithSize"에 대한 호출이 nil을 반환한다는 것을 알 수 있습니다. 따라서 지정된 지정된/willReturn 명령을 전혀 알지 못합니다.
나는이 다양한 아이디어를 시도하면서 행운이없이 잠시 동안 내 머리를 긁적 거리는 문서 &을 검색했습니다. 테스트를 수행하는 방법이 있습니까? 아니면 OCMockito가 실제로 지원하지 않는 것입니까? 그렇다면 키위가이 문제를 처리 할 수 있습니까? 미리 감사드립니다. mockOrange 내부 메소드 호출이 SUT의 코드에서 발생하는 경우
it(@"should return a valid Orange", ^{
id mockOrange = [MyOrange mock];
id mockBowl = [MyBowl mock];
[mockBowl stub:@selector(getAnOrangeWithSize:) andReturn:mockOrange];
MyOrange *returnedOrange = [sut getAnOrangeFromBowl:mockBowl withSize:@"whatever"];
[[returnedOrange should] equal:mockOrange];
});
는 mockOrange가 만든 nullMock 또는 스터브로 설정 될 수있다 -이 :
편집 : 아래 그림과 같이 뉴질랜드에서이 작업을 수행하기 위해 가능한 것 그 전화를 처리합니다.
저는 키위모 (keiwi)에 매우 익숙하므로 위의 내용이 적합하지 않을 수 있습니다. 나는 또한 전달 된 특정 인자 값으로 만 작동하는 스텁을 어떻게 생성하는지 알지 못 했으므로 위의 예제를 사용하여 하나의 MyOrange 인스턴스를 반환하는 "크기가 큰"크기를 만들 수 있고, "곰팡이가 피곤하다"가 또 다른 것을 되 돌린다. 그러나 나는 그것이 어떻게되는지를 발견 할 수 없다면 다른 질문에 대한 주제라고 생각한다.
위의 키위 코드와 동일한 OCMockito/Hamcrest 코드를 여전히 알고 싶습니다. 지금은 Unanswered로 남겨 두겠습니다.
'getAnOrangeFromBowl :'의 구현을 보여줄 수 있습니까? – NSAddict
도움이 될까요? "MyBowl"클래스를 조롱하고 해당 메서드 호출이 반환해야하는 것을 지정합니다. 나의 이해는 MyBowl의 실제 클래스와 메서드가 사용되지 않는다는 것이며 MyBowl의 실제 구현은 관련이 없다는 것입니다. –
아마도 OCMockito에 익숙하지 않은 것 같습니다. – NSAddict