我上课ABCD.m,如下所示
**ABCD.m**
@property (nonatomic, strong) UIButton *button;
@property (nonatomic, strong) NSString *string;
- (void) firstMethod;
- (void) setTheButtonWithBool:(BOOL)var1 withString:(NSString *)var2;
-(void) firstMethod {
// Alloc init button
self.button.enabled = NO;
}
- (void) setTheButtonWithBool:(BOOL)var1 withString:(NSString *)var2 {
self.button.enabled = var1;
self.string = var2;
}
还有另一个类Test.m(XCTestCase的子类)来编写ABCD.m的单元测试用例
**Test.m** //Sub-class of XCTestCase
//Extension
@interface ABCD.m ()
@property (nonatomic, strong) UIButton *button;
@property (nonatomic, strong) NSString *string;
- (void) firstMethod;
- (void) setTheButtonWithBool:(BOOL)var1 withString:(NSString *)var2;
@end
@interace Test : XCTestCase
- (void)testSomeMethod {
ABCD *abcd = [ABCD alloc] init];
BOOL *var1 = YES;
NSString *var2 = @"StackOverFlow";
[abcd firstMethod];
[abcd setTheButtonWithBool:var1 withString:var2];
nslog(@"Result1 :%hhd", self.abcd.button.isEnabled); -----
nslog(@"Result2: %@", self.abcd.string); -----
// Assert statement
}
输出:
结果1:否
结果2:StackOverFlow
当我设置属性'string'时,它被设置为'StackOverFlow'。但对于UIButton属性“按钮”,它没有设置为“否”。 为什么我不能设置UIButton的'enabled'属性,因为我可以从Test.m类设置ABCD.m的NSString
答案 0 :(得分:0)
问题很简单。您永远不会在button
实例上设置ABCD
属性。没有代码可以创建UIButton
并将其分配给button
属性。
self.button.enabled = NO
之类的通话已转换为[[self button] setEnabled:NO]
。由于您尚未设置button
,因此对[self button]
的调用会返回nil
。所以现在你在一个基本上是无操作的setEnabled:
对象上调用nil
。
添加代码以创建按钮并设置button
属性,其余代码将正常运行。