OCMock을 사용하여 iOS와 조롱하는 속도가 빨라지고 있습니다. 나는 내가 설정 한 기대치에 근거하여 통과 할 간단한 모의 단위 테스트를 작성했다. 실패해야한다.OCMock. 왜이 시험의 두 번째 시험은 통과합니까?
// Scientific Calculator class
@implementation ScientificCalculator
- (NSNumber *)sqrt:(NSNumber *)input {
return [NSNumber numberWithDouble:sqrt([input doubleValue])];
}
@end
// unit test
-(void) testScientificCalculatorSqrt {
NSNumber *input = [NSNumber numberWithDouble:4];
ScientificCalculator *scientificCalculator = [[ScientificCalculator alloc] init];
NSNumber *expected = [NSNumber numberWithDouble:2];
NSNumber *result = [scientificCalculator sqrt:input];
STAssertEquals([result doubleValue], [expected doubleValue], nil);
}
// unit test
-(void)testScientificCalculatorMocking {
// setup
NSNumber *input = [NSNumber numberWithDouble:44];
id scientificCalculator = [OCMockObject mockForClass:[ScientificCalculator class]];
// expect
NSNumber *expected = [NSNumber numberWithDouble:2];
[[[scientificCalculator expect] andReturn:expected] sqrt:input];
// test
NSNumber *result = [scientificCalculator sqrt:input];
// verify
STAssertEquals([result doubleValue], [expected doubleValue], nil);
[scientificCalculator verify];
}
testScientificCalculatorMocking
유닛 테스트 sqrt
입력으로 사용 44
: 여기
2
으로 설정했습니다.
STAssertEquals
및
[scientificCalculator verify]
모두 성공적으로 통과합니다.
누군가 내가 여기서 잘못하고있는 것을 설명해 주시겠습니까?
감사합니다,
더그
스텁과 모의의 차이에 대해 혼란스러워하는 것 같습니다. 나는 '기대'(mock)가 이것이 반환 된 기대 값이라는 것을 의미한다고 생각했다. 따라서 메서드가 그 값을 반환하지 않으면 무언가 잘못되었으며 확인이 실패해야합니다. 스텁이 입력에 관계없이 특정 반환 값을 적용한다고 생각했습니다. 귀하의 대답은 그들의 의미가 매우 가깝다는 것을 나타내는 것 같습니다. 나는 혼란 스럽다. – dugla
Expect는 mock 객체와의 상호 작용을 확인하는 것입니다. – trydis