1

我有 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

当我设置属性“字符串”时,它被设置为“StackOverFlow”。但是对于 UIButton 属性“按钮”,它没有设置为“否”。为什么我不能设置 UIButton 的“启用”属性,因为我可以从 Test.m 类设置 ABCD.m 的 NSString

4

1 回答 1

0

问题很简单。您永远不会在您的实例上设置button属性。ABCD没有代码可以创建 aUIButton并将其分配给button属性。

一个电话 likeself.button.enabled = NO被翻译成[[self button] setEnabled:NO]. 由于您尚未设置button,因此调用[self button]返回nil。所以现在你调用setEnabled:一个nil基本上是无操作的对象。

添加代码以创建按钮并设置button属性,其余代码将正常工作。

于 2014-01-30T04:49:49.043 回答