iOS 单元测试:如何对 firstResponderStatus 进行单元测试

Posted

技术标签:

【中文标题】iOS 单元测试:如何对 firstResponderStatus 进行单元测试【英文标题】:iOS unit test: How to unit test firstResponderStatus 【发布时间】:2015-08-12 05:26:05 【问题描述】:

我正在编写一个测试来确认方法是否将焦点转移到下一个文本字段。我尝试了ios unit test: How to set/update/examine firstResponder? 的代码。但它失败了。

- (void)testFocusMovedToYearField 
  UIWindow *window = [[UIWindow alloc] init];
  [window addSubview:self.dateCell.txtDay];
  [window addSubview:self.dateCell.txtYear];   
  [self.dateCell completionBlockHelper];
  [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:5.0]]; 
  XCTAssertTrue([self.kioskDateCell.txtYear isFirstResponder]);

函数completionBlockHelper 包含使txtYear 成为第一响应者的代码。

任何建议都会有所帮助。

【问题讨论】:

这对我有用。你确定self.dateCell.txtYear 不是nil 吗?你确定completionBlockHelper 被调用了吗?尝试逐步完成测试以尝试找出发生了什么。 是的,很确定 self.dateCell.txtYear 不是 nil 并且 completionBlockHelper 也会被调用。我还尝试用[self.dateCell.txtYear becomeFirstResponder] 替换[self.dateCell completionBlockHelper] 只是为了检查它是否有效但没有运气。 有什么更新吗?我遇到了同样的问题。尝试放置一个假的虚拟视图无济于事 【参考方案1】:

窗口需要成为关键窗口。在 Swift 中:window.makeKeyAndVisible()

【讨论】:

以上是关于iOS 单元测试:如何对 firstResponderStatus 进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

检测插入的单元格,然后让它成为FirstResponder

如何在 ios XCTestCase 中对两个对象不相等进行单元测试

UITableView 单元格中的 UITextField 以编程方式成为FirstResponder

如何对使用 cookie 的 socket.io 中间件进行单元测试

验证 ios 中的文本字段并设置 FirstResponder

如何对`viewDidLoad()`进行单元测试