Pregunta

Soy bastante nuevo en las pruebas unitarias, y en iOS en particular.

Tengo un caso de prueba que debería tener éxito si veo que dos objetos NO son iguales

No encuentro un método que me dé eso, además de solicitar que la prueba falle al comprobar que son iguales.

No deseo que una prueba falle para objetos que no son iguales,

Deseo que la prueba tenga éxito si los objetos no son iguales.

¿Qué método logrará eso?

Este es mi método de prueba:

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

}

¿Fue útil?

Solución

Simplemente pruebe lo que realmente desea que suceda, no es necesario complicar demasiado la prueba:

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

el == operador en objetos prueba la igualdad de punteros, por lo que si server1 son los mismos objetos que server2 entonces tu prueba fallará como quieras.

Alternativamente

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

Si desea probar un tipo diferente de igualdad, como se hace con isEqual, que devuelve verdadero si los atributos del objeto son iguales, incluso si los objetos no son la misma instancia, entonces:

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

Todo depende del tipo de igualdad que estés probando.

Otros consejos

Las macros XCTest generalmente admiten condiciones verdaderas, no falsas.Así que mientras puedas decir

XCTAssertEqualObjects(server1, server);

para probar la igualdad, y

XCTAssertEqual(server1, server);

Para probar la identidad, no es fácil invertirlos.Tienes que recurrir a XCTAssertTrue/False, que no es tan bueno porque simplemente te dice que la aserción falló, pero no te dice los valores a menos que los incluyas explícitamente en el mensaje:

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

Aquí es donde resultan útiles los emparejadores más expresivos, que se encuentran en marcos como OCHamcrest, Kiwi, Expecta y Cedar.En OCHamcrest, por ejemplo, las coincidencias se pueden componer a partir de otras coincidencias, por lo que puedes envolver isNot(…) alrededor de cualquier comparador.Para probar que el servidor1 y el servidor2 son no igual, es

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

Asimismo, para probar que el servidor1 y el servidor2 son no idéntico, es

assertThat(server, isNot(sameInstance(server1))));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top