이러한 기능은 모두 OCMock website에 매우 명확하게 설명되어 있습니다. 다른 Objective-C 코드와 달리 iOS7 조롱에 특별한 것은 없습니다. 이러한 다양한 조롱 방법의 차이에 대해 걱정하기 전에 왜 조롱하고 싶은지 고려해 볼 수 있습니다.
클래스를 테스트하고 특히 "verifySetUp"라는 메서드를 테스트하려고합니다. 그 방법은 무엇을합니까? 어떤 입력이 받아 들여지며 완료 될 때 예상되는 결과는 무엇입니까? 테스트에서이 메서드를 직접 호출하고 나중에 원하는 결과가 발생한다고 주장합니다. 기대에 대한 주장을하려면 STAssert
또는 XCTAssert
을보십시오.
모킹을 사용하면 테스트중인 장치 이상으로 기능을 스텁 아웃 할 수 있습니다. 테스트중인 메소드가 다른 메소드를 호출한다고 가정하십시오. 이 메소드가 호출되었는지 확인하거나, 메소드 호출을 위조하여 원하는 데이터를 리턴하거나, 테스트와 관련이 없기 때문에 메소드가 실행되지 않도록 할 수 있습니다. 이 경우 모의 객체 사용을 고려할 수 있습니다. 당신이 필요로 할 때
이 문서는 이것을 잘 다루고 있지만,이 객체의 메소드의 일부를 조롱하고자하지만 당신은 조롱 객체와의 모든 상호 작용에 대해 신경 때 다른 사람들이 원래 구현, objectMocks
를 사용할 때 일반적으로는 partialMocks
를 사용하고 niceMocks
객체의 특정 기능을 조롱하지만 객체에 대한 다른 호출을 기꺼이 수행하는 것은 실패하지 않습니다.
마지막으로, 다시 'verifySetUp'이 무엇인지 모르지만 그 이름 자체가 테스트임을 암시합니다. 귀하의 의도가 일부 '설정'을 수행하는 방법에 대한 테스트 커버리지를 작성하는 것이라면, 테스트에서 직접 설정 방법을 호출 할 수 있습니다.
예 :
- (void)test_setUp_shouldStartEngine_andSetWidgetReadyStateToYes
{
// Set up a mock to verify a method will be called by our method under test.
id engineMock = [OCMock niceMockForClass:Engine.class];
[[engineMock expect] start];
// Create a real object that will be manipulated by our method under test.
Widget *widget = [Widget new];
// Do the work
[AppController setUpEngine:engineMock widget:widget];
// Verify the widget is ready
XCTAssertTrue(widget.ready, @"Widget not ready");
// Verify engine's start method was called
[engineMock verify];
}
도움이 되었기를 바랍니다. 행복한 단위 테스트; 코드가 의도 한대로 작동하는지 확인하는 좋은 방법입니다!