我是 “iOS” 的初学者,从这个问题中就会清楚!!我正在为我的 iOS 应用编写单元测试。我正在尝试从测试类 设置UITextField
。每次我从测试用例 设置用户名 textfield
文本时,它都会返回null
。我没有办法做到这一点吗?我真的不想更改我的 Controller 类中的代码来进行测试!
除了使用@synthesize
(我认为在“iOS7”中不需要)之外,所有在线示例都创建了一个类的实例并设置如下文本,为什么返回 null
?
Controller.h
中的代码:
@property (nonatomic, retain) IBOutlet UITextField *username;
测试用例类:
SignUpViewController *viewController = [[SignUpViewController alloc]init];
viewController.username.text = @"username@example.com";
username.text =null
最佳答案
由于您的属性是使用 IBOutlet
声明的,因此我假设您正在为您的 View 使用 Storyboard。如果是这种情况,那么这不是 textField 的 text 为 nil 的问题,而是整个 textField 为 nil 的问题。
当从 Storyboard 中加载 View Controller 时,所有 IBOutlet(前提是它们正确连接)都会为您初始化。运行单元测试时,没有与 Storyboard的交互,因此您的 textField 不会被初始化。
要解决这个问题,您可以自己创建和分配 textField:
SignUpViewController *viewController = [[SignUpViewController alloc]init];
viewController.username = [[UITextField alloc] init];
viewController.username.text = @"username@example.com";
或者,更好的是,您可以查看 OCMock ,并在您的单元测试中创建和分配一个模拟文本字段。
关于ios - 从另一个类设置 UITextField 的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23397209/