, 나는 여기에 직면하고 문제는 내가 CGRect
을 반환 foo
을 하나의 방법이라는 한이 방법은 다른 방법 <code>callFoo</code>에서 호출, 난 그냥 <code>OCMock</code> 연습했다
이다 충돌합니다.
-(CGRect)foo {
return CGRectMake(10, 10, 10, 10);
}
-(void)callFoo {
CGRect rect = [self foo];
NSLog(@"%@",NSStringFromCGRect(rect));
}
는 callFoo
방법에 대한 나의 단위 테스트는 우는 소리입니다. 이 CGRect rect = [self foo];
나는 우리가이 충돌을 해결하기 위해 mocked method
방법에서 CGRect
를 반환 할 경우이 충돌이 일어나는 이유를 알고 싶어 도달하면
- (void)test__callFoo__invokesWithMockingFoo
{
ViewController *sut = [[ViewController alloc] init];
id master = [OCMockObject partialMockForObject:sut];
CGRect rect = CGRectMake(0, 0, 0, 0);
[[[master expect] andReturnValue:OCMOCK_VALUE(rect)] foo];
[sut callFoo];
[master verify];
}
이 테스트 케이스를 실행
, 나는 예기치 않은 충돌을 얻고있다.이 문제를 해결하는 데 도움이 될 수 있습니까?
미리 감사드립니다.
P.S : CGRect를 NSValue로 바꿔도 괜찮습니다.
-(NSValue *)foo {
return [NSValue valueWithCGRect:CGRectMake(10, 10, 10, 10)];
}
-(void)callFoo {
CGRect rect = [[self foo] CGRectValue];
NSLog(@"%@",NSStringFromCGRect(rect));
}
내 테스트 케이스에서 As shown below
,
NSValue *rect = [NSValue valueWithCGRect:CGRectMake(0, 0, 0, 0)];
[[[master expect] andReturn:rect] foo];
갱신 :
이 메모리에 문제처럼 보인다 [하지만 난 그냥 추측 확실하지 않다].
변수가 2 double
이거나 구조가 3 CGFloat
인 구조를 만들면 모의가 적용된 메서드는 2 CGFloat
인 구조를 만들면 정확한 구조를 제공합니다. :)
재미있는
이것은 OCMock의 버그 인 것 같습니다.결국 foo가 부분 모의 (partial mock) 내에서 null 구현을 가리키게됩니다. foo를 직접 호출하면 테스트를 통과 할 수 있음을 알았을 수도 있습니다. foo를 다른 클래스에 넣고 조롱하는 것이 (대단히 큰) 해결책이 될 것입니다. –
OCMock의 버그인지 여부는 확실하지 않지만, CGRect ie와 유사한 사용자 지정 구조체로 시도했을 때. struct는 두 개의 변수 (struct1 & struct2)를 포함합니다. 그러나 결과는 동일합니다. 하지만 구조체 즉 struct1과 struct2에 변수가 하나만 포함되어 있으면 테스트가 통과합니다 –
이것은 OCMock의 버그입니다 (https://github.com/erikdoe/ocmock/pull/41). 풀 요청에 대한 주석을 보면 왜 일부 (일반적으로 큰) 구조체에만 문제가 있는지 알 수 있습니다. –