Domanda

Sono abbastanza nuovo per il test unitario e in ios in particolare

Ho un testcase che dovrebbe avere successo se vedo due oggetti non sono uguali

Non riesco a trovare un metodo che mi dà ciò, oltre a richiedere il test di fallire sul controllo che sono uguali.

Non desidero avere un test fallito per gli oggetti che non sono uguali,

Vorrei che il test abbia successo se gli oggetti non sono uguali.

Quale metodo realizzerà questo?

Questo è il mio metodo di prova:

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

}

È stato utile?

Soluzione

Basta testare ciò che vuoi verificare, non è necessario sovraccaricare il test:

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

L'operatore == sugli oggetti Test per l'uguaglianza del puntatore, quindi se server1 è gli stessi oggetti di server2, il test non funziona come si desidera.

In alternativa

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

Se si desidera testare per un diverso tipo di uguaglianza, ad esempio fatto con isEqual, che restituisce true se gli attributi dell'oggetto sono uguali, anche se gli oggetti non sono la stessa istanza, quindi:

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

Tutto dipende dal tipo di uguaglianza per il test.

Altri suggerimenti

XCTest Macros supporta generalmente le condizioni vere, non quelle false.Quindi mentre puoi dire

XCTAssertEqualObjects(server1, server);
.

Per testare l'uguaglianza e

XCTAssertEqual(server1, server);
.

Per testare l'identità, non è facile invertirli.Devi tornare su XctasserTrue / Falso, che non è buono perché ti dice semplicemente che l'asserzione fallì, ma non ti dice i valori a meno che non li includa esplicitamente nel messaggio:

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

È qui che i gaunter più espressivi sono a portata di mano, trovati in quadri come Ochamcrest, kiwi, aspettative e cedro.In Ochamcrest, ad esempio, i gabiners possono essere composti da altri gabinetter, in modo da poter avvolgere isNot(…) attorno a qualsiasi abbinamento.Per testare il server1 e Server2 sono non uguali, è

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

Allo stesso modo, per testare il server1 e Server2 sono non identici, è

assertThat(server, isNot(sameInstance(server1))));
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top