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