iOS XCTestCase에서 두 개체를 단위 테스트하는 방법이 동일하지 않습니다.

StackOverflow https://stackoverflow.com//questions/21000189

문제

나는 단위 테스트에 상당히 익숙하지 않으며 특히 iOS에서는

두 개체가 동일하지 않은 경우 성공해야 하는 테스트 케이스가 있습니다.

테스트가 동일한지 확인한 후 실패하도록 요청하는 것 외에는 이를 제공하는 방법을 찾을 수 없습니다.

나는 동일하지 않은 객체에 대해 테스트가 실패하는 것을 원하지 않습니다.

개체가 동일하지 않으면 테스트가 성공하기를 바랍니다.

어떤 방법으로 이를 달성할 수 있나요?

이것이 내 테스트 방법입니다.

-(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");

}

도움이 되었습니까?

해결책

실제로 실제로 일어나고 싶은지 테스트 할 필요가 없습니다. 테스트를 극복 할 필요가 없습니다.

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

객체의 == 연산자는 포인터 평등을 테스트하므로 server1server2와 동일한 오브젝트이면 테스트가 원하는만큼 실패합니다.

또는

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

객체가 동일한 인스턴스가 아닌 경우에도 객체의 속성이 동일하지 않더라도 true를 반환하는 isEqual로 완료된 다른 유형의 평등을 테스트하려는 경우 :

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

모든 것은 테스트중인 평등 유형에 따라 다릅니다.

다른 팁

XCTest 매크로는 일반적으로 거짓 조건이 아닌 참 조건을 지원합니다.그러니 당신이 말할 수 있는 동안

XCTAssertEqualObjects(server1, server);

동등성을 테스트하기 위해

XCTAssertEqual(server1, server);

신원을 테스트하기 위해 이를 뒤집는 것은 쉽지 않습니다.XCTAssertTrue/False로 대체해야 합니다. 이는 단순히 어설션이 실패했음을 알려주지만 메시지에 명시적으로 값을 포함하지 않는 한 값을 알려주지 않기 때문에 좋지 않습니다.

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

OCHamcrest, Kiwi, Expecta 및 Cedar와 같은 프레임워크에서 찾을 수 있는 보다 표현력이 뛰어난 매처가 편리한 곳입니다.예를 들어 OCHamcrest에서는 매처가 다른 매처로 구성될 수 있으므로 다음과 같이 래핑할 수 있습니다. isNot(…) 모든 일치자 주위에.server1과 server2가 다음과 같은지 테스트하려면 ~ 아니다 동등하다, 그것은

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

마찬가지로 server1과 server2가 다음과 같은지 테스트하려면 ~ 아니다 동일해요, 그렇죠

assertThat(server, isNot(sameInstance(server1))));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top