2014-01-08 12 views
0

我是相当新的单元测试,并在iOS的特别如何单元测试两个对象都没有在IOS等于XCTestCase

我有一个测试用例,如果我看到两个对象不相等,这应该会成功

我找不到一个给我的方法,除了要求测试在检查它们相等时失败。

我不希望有一个测试失败是不相等的对象,

我希望测试成功,如果对象是不相等的。

哪种方法可以实现这一点?

这是我的测试方法:

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

}

回答

0

只是测试你真正希望发生的事情,没有必要过分复杂化您的测试内容:

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

==操作上的对象测试指针是否相等,所以如果与server2是相同的对象,那么测试将会失败。

或者

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

如果你想测试一个不同类型的平等,如用isEqual做,如果对象的属性是相等返回true,即使对象是不一样的例如:

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

这一切都取决于您测试的平等类型。

1

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)))); 
相关问题