Pergunta

Eu sou bastante novo para o teste de unidade, e em particular no iOS

Eu tenho um testcase que deve ter êxito se eu ver dois objetos NÃO são iguais

Eu não encontrar um método que me dá que, além de pedir que o teste falhe, após a verificação de que eles são iguais.

Eu não gostaria de ter um teste falhar para objetos que não são iguais,

eu desejo que o teste seja bem-sucedido se os objetos não são iguais.

Qual método irá fazer isso ?

Este é o meu método de ensaio:

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

}

Foi útil?

Solução

Testar apenas o que você realmente deseja que aconteça, não precisa complicar demais o seu teste:

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

o == operador em objetos de testes para o ponteiro de igualdade, para que se server1 é o mesmo objetos como server2 em seguida, o teste falhará como você deseja.

Como alternativa

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

Se você quer testar por um tipo diferente de igualdade, tal como foi feito com isEqual, que retorna verdadeiro se os atributos do objeto são iguais, mesmo se os objetos não são a mesma instância e, em seguida:

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

Tudo depende de que tipo de igualdade que você está testando.

Outras dicas

XCTest macros de apoio, geralmente verdadeiras condições, não falsos.Então, enquanto você pode dizer

XCTAssertEqualObjects(server1, server);

para testar igualdade, e

XCTAssertEqual(server1, server);

para testar a sua identidade, não é fácil inverter-los.Você tem que cair de volta na XCTAssertTrue/Falso, o que não é tão bom porque ele simplesmente diz que a falha de asserção, mas não informa os valores, a menos que você explicitamente de incluir na mensagem:

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

Este é o lugar onde mais expressiva matchers são úteis, encontrado em estruturas como OCHamcrest, Kiwi, Expecta e Cedro.Em OCHamcrest, por exemplo, matchers pode ser composto de outros matchers, de modo que você pode quebrar isNot(…) em torno de qualquer amigo.Para testar se o servidor1 e servidor2 são não igual, é

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

Da mesma forma, para testar se o servidor1 e servidor2 são não idênticos, é

assertThat(server, isNot(sameInstance(server1))));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top