点击按钮后,UIImagePickerController将显示为模态视图控制器,其代码如下:
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.delegate = self;
[self presentViewController:imagePicker animated:YES completion:nil];
它在模拟器和设备上运行良好,但我想为它添加一个单元测试(使用GHUnit)并且我试图测试presentViewController不是nil。
但是,当我运行测试时,我会将下面的警告打印到控制台。有谁知道怎么解决这个问题,我可以正确地测试一下吗?
Warning: Attempt to present <UIImagePickerController: 0xab5e990> on <UINavigationController: 0xab5a790> whose view is not in the window hierarchy!
顺便说一下 - 我已经设置了shouldRunOnMainThread来为这个特定的测试文件返回YES。
答案 0 :(得分:0)
在单元测试期间,您的 ViewController 未呈现在 Window 上,因此它无法呈现其他 Coordinator。您需要创建一个 UIWindow,例如在您的设置方法中,并在您的测试中的窗口上显示 UINavigationController。
final class YourTest: XCTestCase {
private var window: UIWindow!
override func setUp() {
super.setUp()
window = UIWindow()
}
override func tearDown() {
window = nil
super.tearDown()
}
func testSomething() {
let controller = YourCustomController()
window.rootViewController = controller
window.makeKeyAndVisible()
controller.callSomeMethod()
...
}
...
}