【问题标题】:how to unit test two objects are not equal in ios XCTestCase如何在 ios XCTestCase 中对两个对象不相等进行单元测试
【发布时间】:2014-01-08 15:45:25
【问题描述】:

我对单元测试相当陌生,尤其是在 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");

}

【问题讨论】:

    标签: ios unit-testing assertions xctest


    【解决方案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))));
    

    【讨论】:

      【解决方案2】:

      只需测试您真正想要发生的事情,无需使您的测试过于复杂:

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

      对象上的== 运算符测试指针是否相等,因此如果server1server2 是相同的对象,那么您的测试将会失败。

      或者

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

      如果你想测试不同类型的相等性,比如用isEqual完成,如果对象的属性相等则返回true,即使对象不是同一个实例,那么:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-11
        • 2021-12-22
        • 1970-01-01
        相关资源
        最近更新 更多