【发布时间】:2012-12-20 15:49:26
【问题描述】:
为什么当我在第 43 行使用方法 respondsToSelector: 或 instancesRespondToSelector: 时,我无法绕过 STAssertTrue?
//我的测试用例代码
- (void)testApiClass {
//Check object
NSString* classKey = @"Api";
id obj = NSClassFromString(classKey);
STAssertNotNil(obj, [NSString stringWithFormat:@"Model '%@' not found.", classKey]);
//Check properties
NSArray* properties =
@[
@"performSyncRequestWithUri::",
@"performAsyncRequestWithUri:::",
];
for (NSString* property in properties) {
SEL propertySel = NSSelectorFromString(property);
BOOL isRespondsToSel = [obj respondsToSelector:propertySel];
STAssertTrue(isRespondsToSel, [NSString stringWithFormat:@"Property '%@' not found on object of class name '%@'", property, [obj class]]);
}
}
@interface Api : NSObject
- (NSDictionary*)performSyncRequestWithUri:(NSString *)requestUri params:(NSDictionary *)params;
- (void)performAsyncRequestWithUri:(NSString *)requestUri params:(NSDictionary *)params completionHandler:(void (^)(NSDictionary *, NSError *))completionBlock;
@end
【问题讨论】:
-
“第 43 行”没有行号
-
"performSyncRequestWithUri::" "performAsyncRequestWithUri:::" 你真的有这样命名的方法吗?我对此表示高度怀疑。按照惯例,我们通常不会使用空关键字创建方法
-
Sorry line 43 在这种情况下表示下一行:
BOOL isRespondsToSel = [obj respondsToSelector:propertySel]; -
我真的有这个方法。你可以在我的帖子下面找到接口(我有实现)
-
这不是 TDD。编写一个复杂的测试(使用 for 循环!)来证明一个对象符合它的接口有什么意义? Xcode 会在没有测试的情况下告诉你。相反,为一项功能编写一个简单的小测试。
标签: objective-c tdd respondstoselector