ios - 类平等的单元测试

标签 ios objective-c class unit-testing xctest

我正在向项目添加一些单元测试,并希望进行一个测试来检查从方法返回的数组是否不可变,因此我创建了以下单元测试:

- (void)testReturnedObjectIsOfTypeImmutableArray
{
    XCTAssertEqualObjects([NSArray class],
                          [[NSArray reverseArray:self.array] class],
                          @"NSArray should be returned");
}

但是这会失败,因为返回的对象属于“__NSArrayI”类而不是“NSArray”类。

我无法弄清楚如何调整上述内容以使“_NSArrayI”可以接受,而接收“_NSArrayM”或“NSMutableArray”应该是 Not Acceptable 。

最佳答案

正如答案中所建议的 How to get classname in objective c Like 'NSString' ,您可以使用 classForCoder 而不是 class。示例:

NSArray *a = @[@"foo"];
NSMutableArray *b = [a mutableCopy];

NSLog(@"a class: %@", [a class]); // -> __NSArrayI
NSLog(@"b class: %@", [b class]); // -> __NSArrayM
NSLog(@"a classForCoder: %@", [a classForCoder]); // -> NSArray
NSLog(@"b classForCoder: %@", [b classForCoder]); // -> NSMutableArray

所以这个测试应该给出预期的结果:

- (void)testReturnedObjectIsOfTypeImmutableArray
{
    XCTAssertEqualObjects([NSArray class],
                          [[NSArray reverseArray:self.array] classForCoder],
                          @"NSArray should be returned");
}

关于ios - 类平等的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21675769/

相关文章:

iphone - 解析 NSData 对象以获取信息

ios - 使用 UILocalNotifications、带有完成处理程序的远程通知和后台获取

java - 如何正确连接类(构造函数中的堆栈溢出)

java - 类调用其他类

java-无法将查询返回的对象映射到正确定义的类

ios - Person 没有可见性 @interface

ios - 在每次分支切换优化后安装 pod,清理项目和派生数据

ios - 使用 IBInspectable 的选定状态的 UIButton 边框颜色

iOS My APP crash in main 怎么找错误?

ios - 点击并按住 UITableViewCell 并移动到其他 UITableView