메서드가 'x'번 호출되었는지 확인하는 방법이 있습니까?OCMock을 사용하여 메서드 호출 수를 확인하는 방법
답변
OCMock의 경우 test file에서 전화를 걸면 같은 번호의 expect
이 필요합니다. 그래서 당신은 someMethod
세 번 호출하는 경우, 당신은 아마 당신이 루프에 넣어 수 있습니다, 이것은 비록 추한 것 같다
[[mock expect] someMethod];
[[mock expect] someMethod];
[[mock expect] someMethod];
...test code...
[mock verify];
... 어떻게해야합니까? 나는 블록에 위임 할 수있는 기능을 활용하여 성공을 거두었습니다
:
OCMStub([mock someMethod]).andDo(^(NSInvocation *invocation)
{ /* block that handles the method invocation */ });
블록 내부에서, 난 그냥 callCount
변수를 증가 한 다음 통화의 예상 번호와 일치하는지 주장한다. 예를 들어 블록이 호출 될 때마다 someMethod
를 호출해야
- (void)testDoingSomething_shouldCallSomeMethodTwice { id mock = OCMClassMock([MyClass class]); __block int callCount = 0; OCMStub([mock someMethod]).andDo(^(NSInvocation *invocation) { ++callCount; }); // ...exercise code... int expectedNumberOfCalls = 2; XCTAssertEqual(callCount, expectedNumberOfCalls); }
, 그래서 callCount
는 항상 방법이 실제로 호출 된 횟수와 동일해야합니다.
그런 다음 모든 스텁 된 메소드에서이 작업을 수행해야하며 'OCMVerifyAll (mock)'을 호출 할 수 없습니까? OCMock의 최신 버전에 대한 최선의 접근법을 알고 계십니까? (OCMockito는이 영역에서 더 나은 지원을하는 것 같다.) – Drux
OCMock이'''OCMVerify (stub, callCount)''를 더 잘 지원했으면 좋겠다. 좋은 대답. –
비슷한 생각 : [OCMArg checkWithBlock :]을 사용하고 해당 블록에서 callCount를 업데이트하십시오. 하지만 어떻게 든 예상대로 작동하지 않습니다. checkWithBlock은 모든 메소드 호출마다 2 회 호출됩니다. – JanR
당신이 방법에만 호출되어 있는지 확인해야하는 경우 하면, 당신은 내가이는 방법은 적어도 3 번 호출되었는지 확인합니다 생각이
[self.subject doSomething];
OCMVerify([self.mock method]);
OCMReject([self.mock method]);
[self.subject doSomething];
처럼 그것을 할 수 있습니다, 그래서 것 그것이 4 번 불리는 경우에 또한 통과하십시오. –
v2.2.3을 테스트 한 결과 someMethod에 대한 호출 수와 expectModod의 숫자가 정확히 일치해야합니다. – Skotch
@dB & Skotch : 사용하는 모의 종류에 따라 다름 - niceMock을 만드는 경우 '적어도'숫자를 기대합니다. 정확한 수치를 기대하는 평범한 모의어 일 경우 –