Frage

Ich bin ziemlich neu im Bereich Unit-Tests und insbesondere in iOS

Ich habe einen Testfall, der erfolgreich sein sollte, wenn ich sehe, dass zwei Objekte NICHT gleich sind

Ich kann keine Methode finden, die mir das ermöglicht, abgesehen davon, dass ich anfordere, dass der Test fehlschlägt, wenn überprüft wird, ob sie gleich sind.

Ich möchte nicht, dass ein Test für Objekte fehlschlägt, die nicht gleich sind.

Ich wünsche mir, dass der Test erfolgreich ist, wenn die Objekte nicht gleich sind.

Mit welcher Methode gelingt das?

Das ist meine Testmethode:

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

}

War es hilfreich?

Lösung

Testen Sie einfach, was tatsächlich passieren soll, ohne Ihren Test zu verkomplizieren:

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

Die == Operator für Objekte prüft auf Zeigergleichheit, also wenn server1 sind die gleichen Objekte wie server2 dann wird Ihr Test wie gewünscht fehlschlagen.

Alternative

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

Wenn Sie auf eine andere Art von Gleichheit testen möchten, z. B. erledigt mit isEqual, was „true“ zurückgibt, wenn die Attribute des Objekts gleich sind, auch wenn die Objekte nicht dieselbe Instanz sind, dann:

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

Es hängt alles davon ab, auf welche Art von Gleichheit Sie testen.

Andere Tipps

XCTest-Makros unterstützen im Allgemeinen wahre Bedingungen, keine falschen.Man kann es zwar sagen

XCTAssertEqualObjects(server1, server);

auf Gleichheit prüfen, und

XCTAssertEqual(server1, server);

Um die Identität zu testen, ist es nicht einfach, sie umzukehren.Sie müssen auf XCTAssertTrue/False zurückgreifen, was nicht so gut ist, weil es Ihnen lediglich mitteilt, dass die Behauptung fehlgeschlagen ist, Ihnen aber die Werte nicht mitteilt, es sei denn, Sie fügen sie explizit in die Nachricht ein:

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

Hier bieten sich ausdrucksstärkere Matcher an, die in Frameworks wie OCHamcrest, Kiwi, Expecta und Cedar zu finden sind.In OCHamcrest können Matcher beispielsweise aus anderen Matchern zusammengesetzt werden, sodass Sie sie umbrechen können isNot(…) um jeden Matcher.Um zu testen, ob Server1 und Server2 vorhanden sind nicht gleich, es ist

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

Ebenso, um zu testen, ob Server1 und Server2 vorhanden sind nicht identisch, es ist

assertThat(server, isNot(sameInstance(server1))));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top