- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在为 iPhone 应用程序进行简单的 OCUnit 测试,只是想断言应用程序委托(delegate)是我预期的类的实例。没想到这个测试非常有用,结果却暴露了我对Objective C的一个误解。
我首先获得对委托(delegate)的引用。然后我记录返回的类名。在我的例子中,输出正确地显示“app delegate 的类名是 CalculatorAppDelegate”。
然而,下一行的断言失败了,我不明白为什么。
- (void)testAppDelegate
{
id appDelegate = [[UIApplication sharedApplication] delegate];
NSLog(@"app delegate's class name is %@", NSStringFromClass([appDelegate class]));
NSLog(@"is it kind? %i", [appDelegate isKindOfClass:[CalculatorAppDelegate class]]);
NSLog(@"is it member? %i", [appDelegate isMemberOfClass:[CalculatorAppDelegate class]]);
NSLog(@"class == class %i", [appDelegate class] == [CalculatorAppDelegate class]);
STAssertTrue([appDelegate isKindOfClass:[CalculatorAppDelegate class]], @"wtf");
}
什么情况会导致 NSStringFromClass() 返回正确的类名,而 isKindOfClass 返回 false?
2011-03-19 15:51:13.864 Calculator[40092:207] app delegate's class name is CalculatorAppDelegate
2011-03-19 15:51:13.864 Calculator[40092:207] is it kind? 0
2011-03-19 15:51:13.865 Calculator[40092:207] is it member? 0
2011-03-19 15:51:13.865 Calculator[40092:207] class == class 0
/Users/pohl/Developer/FoundationCalculator/CalculatorTests/CalculatorBrainTests.m:37: error: -[CalculatorBrainTests testAppDelegate] : "[appDelegate isKindOfClass:[CalculatorAppDelegate class]]" should be true. wtf
Test Case '-[CalculatorBrainTests testAppDelegate]' failed (0.002 seconds).
最佳答案
您没有正确配置测试目标。如果你关注了this guide for unit testing applications你应该有 3 个目标:Calculator、CalculatorTests 和 CalculatorTesting。检查 CalculatorTests 中的“构建阶段”部分。在“编译源”中,只有 SenTestCase 源文件应该列在那里。我猜你在那里添加了 CalculatorAppDelegate.m 和其他文件 - 这会导致相同源文件的重复程序集,然后在你构建 CalculatorTesting 目标。这解释了为什么您的断言失败。
编辑:刚刚意识到您不需要 Xcode 4 中的 CalculatorTesting 目标。只需转至项目 > 编辑方案...并确保单元测试 bundle 列在测试 部分。然后您可以使用 Cmd-U 运行单元测试。
关于iphone - isKindOfClass 和 NSStringFromClass 不同意 UIApplicationDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5364074/
各位开发者大家好, 我目前正面临一些 Swift 3 代码的奇怪问题。 我有一个自定义日志记录类(使用 XCGLogger): struct Log { #if DEBUG f
它们中的每一个都调用不同的构造函数。 let cell = tableView.dequeueReusableCellWithIdentifier(NSStringFromClass(MessageS
你会认为这会返回一个 NSString: NSString *class = NSStringFromClass([[_array objectAtIndex:([_array count] -2)]
我正在 Swift 项目中记录 class 名称和 enums。我在每个实例字符串描述中看到它附加的项目名称作为前缀。例如, 我创建了 NSObject 的扩展, public extension N
大多数(我所见过的)Core Data 教程都使用以下代码片段,其中 @"MyEntityClass" 硬编码在: NSFetchRequest *request = [[NSFetchRequest
我正在为 iPhone 应用程序进行简单的 OCUnit 测试,只是想断言应用程序委托(delegate)是我预期的类的实例。没想到这个测试非常有用,结果却暴露了我对Objective C的一个误解。
我有 NSDistantObject 类对象数组。 NSLog(@"%@", [[saveClassObject objectAtIndex:0] connectionForProxy]);
NSStringFromClass为类引用提供完全限定的类名,例如 ".self" NSStringClassFromString提供类的类引用 AnyClass对于完全限定的类名,如 "." 。 但
我知道 this question关于我们如何在 Swift 中获得 objective-c 类的可读类名。 我想要实现的是从 objective-c 中获取 Swift 类的可读类名,而不用模块破坏
Swift 中是否有 NSStringFromClass 的等价物,它提供了类名的用户可读版本?我尝试将它与我创建的 native Swift 类一起使用,但如您所见,结果似乎是编译器对类名的内部表示
考虑以下程序: import Foundation import QuartzCore class C: NSObject {} func benchmark() { let swift1 =
if([@"" class] == NSClassFromString(NSStringFromClass([@"" class]))) printf("foo"); else pri
我注意到在默认使用 ARC 的最新版本的 Xcode 中,当您开始一个新项目时 Xcode 为您生成的 main.m 文件使用 NSStringFromClass([AppDelegate class
我是一名优秀的程序员,十分优秀!