【发布时间】:2017-03-18 08:58:04
【问题描述】:
我正在尝试编写单元测试以确保正确触发键盘和显示的视图控制器,但我得到了奇怪的行为,我不明白我认为这与 UIWindow 有效。我正在使用Quick 和Nimble,但我已经用香草XCTest 进行了测试并得到了同样的问题。
我的代码:
import Quick
import Nimble
class TestSpec: QuickSpec {
override func spec() {
let sut = UIViewController()
// The window is nil when this test is run in isolation
UIApplication.shared.keyWindow?.rootViewController = sut
// This does not work either
let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = sut
window.makeKeyAndVisible()
describe("ViewController") {
it("presents a UIAlertController") {
let alert = UIAlertController(title: "Test", message: "This is a test", preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(okAction)
sut.present(alert, animated: true, completion: nil)
expect(sut.presentedViewController).toEventually(beAnInstanceOf(UIAlertController.self))
}
}
}
}
起初,我没有将视图控制器放在窗口中,这会阻止它显示其他视图控制器。现在我正试图放入一个窗口,但这也不起作用。当此测试单独运行时,窗口始终为零。当我用一堆其他测试运行它时,有时窗口不是零,但测试仍然失败。测试确实通过了一小段时间,但由于某种原因我无法再复制它。
有什么想法吗?
【问题讨论】:
-
在您运行测试时您的主机应用程序是否在运行?
标签: ios swift unit-testing