我对单元测试相当陌生,尤其是 iOS

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

除了要求测试在检查它们是否相等时失败之外,我找不到一种方法可以实现这一点。

我不希望对不相等的对象进行测试失败,

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

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

这是我的测试方法:

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

}

有帮助吗?

解决方案

只需测试您实际想要发生的情况,无需使测试过于复杂:

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

== 对象上的运算符测试指针相等性,所以如果 server1 是相同的对象 server2 那么你的测试就会如你所愿地失败。

或者

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

如果您想测试不同类型的相等性,例如使用 isEqual, ,如果对象的属性相等,即使对象不是同一个实例,它也会返回 true,则:

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

这完全取决于您要测试什么类型的平等。

其他提示

xctest宏通常支持真实条件,而不是假的。所以,虽然你可以说

XCTAssertEqualObjects(server1, server);
.

测试平等,和

XCTAssertEqual(server1, server);
.

测试身份,反转它们并不容易。你必须回到xctasserttrue / false上,这不如它,因为它只是告诉你断言失败,但除非您在消息中显式包含它们,否则不会告诉您这些值:

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

这是易于富有效应匹配的地方,发现在ochamcrest,猕猴桃,预期和雪松等框架中。例如,在oChamcrest中,匹配器可以由其他匹配器组成,因此您可以在任何匹配器周围缠绕生成的isNot(…)。要测试server1和server2是不是等于,它是

assertThat(server, isNot(equalTo(server1))));
. 同样,要测试Server1和Server2是不是相同的,它是

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top