2014-01-08 3 views
0

내가 단위 테스트에 상당히 새로운 오전, 나는 두 객체가 동일하지 보면 성공해야하는 나는 테스트 케이스가 특정어떻게 단위 테스트에 두 개체는 IOS에서 동일하지

의 아이폰 OS에서 XCTestCase

필자는 테스트 결과가 동일하다는 것을 확인하지 않고 테스트를 요청할 수있는 방법을 찾을 수 없습니다. 내가 테스트가 동일하지 않은 객체에 대한 실패가 원하지 않는

내가 객체가 동일하지 않을 경우 테스트가 성공하고 싶습니다.

어떤 방법으로 달성 할 수 있습니까?

내 시험 방법 :

-(void)testServerProtocolSetting{ 

ServerProtocol *server = [ServerProtocol sharedInstance]; 

id stub = [OCMockObject mockForClass:[ServerProtocol class]]; 

ServerProtocol *server1 = server; 

[[stub expect]isNULL]; 

[ServerProtocol setSharedInstance:stub]; 

[stub verify]; 

server = [ServerProtocol sharedInstance]; 

XCTAssertEqualObjects(server1, server, @"server and server1 are not equal"); 

}

답변

0

그냥 당신이 실제로 테스트 복잡하게 할 필요가 일어나지 싶은 테스트 :

XCTAssertFalse(server1 == server, @"The objects should not be equal"); 

== 운영자 개체를 포인터가 같음을 테스트하므로 이 server2과 같은 객체 인 경우 원하는대로 테스트가 실패합니다.

또는

XCTAssertTrue(server1 != server, @"The objects should not be equal"); 

당신이 객체가 동일하지 않은 경우에도 객체의 속성이 동일한 경우는 true를 돌려 isEqual으로 수행과 같은 평등의 다른 유형, 테스트하려는 경우 예를 들면 다음과 같습니다.

XCTAssertFalse([server1 isEqual:server], @"The objects should not be equal"); 

모두 테스트 할 평등 유형에 따라 다릅니다.

1

XCTest 매크로는 일반적으로 잘못된 조건이 아닌 실제 조건을 지원합니다. 당신이

XCTAssertEqualObjects(server1, server); 

이 어떤지를 테스트하기 위해 말할 수 있고,

XCTAssertEqual(server1, server); 

신원을 테스트하는 동안 그래서, 그것은 그들을 반전 쉬운 일이 아니다. 당신은 다시는 단순히 선언이 실패한 사실을 알려주기 때문에 좋지 않다 XCTAssertTrue/거짓에 가을해야하지만, 명시 적 메시지에 포함하지 않는 당신에게 값을 말하지 않습니다

XCTAssertFalse([server1 isEqual:server], @"Oops, both objects equal %@", server); 

OCHamcrest, Kiwi, Expecta 및 Cedar와 같은 프레임 워크에서보다 표현 성이 뛰어난 작업자를 쉽게 찾을 수 있습니다. 예를 들어, OCHamcrest에서는 matcher가 다른 matcher에서 구성 될 수 있으므로 isNot(…)을 모든 matcher로 감쌀 수 있습니다. 그 Server1 및 테스트한다 동일하지, 그것은 그 Server1 및 테스트를 위해, 마찬가지로

assertThat(server, isNot(equalTo(server1)))); 

있어이다 하지 동일 그것은

assertThat(server, isNot(sameInstance(server1)))); 
있어