Ios Swift4单元测试:类型转换时未找到ViewController

Ios Swift4单元测试:类型转换时未找到ViewController,ios,swift,unit-testing,swift4,Ios,Swift,Unit Testing,Swift4,我目前正在使用以下代码在MyViewController类上编写测试: let viewController = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "MyViewController") XCTAssertNotNil(viewController.view) XCTAssertNotNil(viewController as? MyViewContr

我目前正在使用以下代码在
MyViewController
类上编写测试:

let viewController = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "MyViewController")
XCTAssertNotNil(viewController.view)
XCTAssertNotNil(viewController as? MyViewController)
此测试不起作用,第二个断言总是失败。调试时,我可以看到我的
viewController
具有正确的类型,但类型转换似乎总是失败

(lldb) po viewController

MyProject.MyViewController: 0x7f900c835600

(lldb) po viewController as? MyViewController

nil
MyViewController
的代码和情节提要正确地包含在测试项目中。还包括椰子荚

我在一个空项目上进行了测试,问题仍然存在

有人有同样的问题吗?我错过什么了吗

编辑。我将代码更改为:

let viewController = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "MyViewController") as? MyViewController
XCTAssertNotNil(viewController)

但是问题仍然存在。

您是否用以下内容替换您的测试:

    XCTAssertTrue(viewController is MyViewController)
我尝试了以下方法(我始终使用ViewController):

那个测试通过了

所以我尝试了你的第二种写作方式:

let viewController = UIStoryboard(
    name: "Main", bundle: Bundle.main).instantiateViewController(
    withIdentifier: "ViewController") as? ViewController
XCTAssertNotNil(viewController)
它通过我的机器

如果它不适合你,可能是因为:

  • 您未能对主模块执行
    @testable import
    ,或者

  • 你有一个模棱两可的类,你需要说
    as?MyProject.MyViewController
    ,或

  • 找不到具有该标识符的视图控制器,或

  • 具有该标识符的视图控制器不是MyViewController


但是,不管怎样,测试告诉了你真相,你需要思考这个真相。您没有给我们提供足够的信息来知道哪些是您的错误。

您是否
@testable导入了您的模块
?您粘贴的代码对我来说很好,显然是在我的故事板/视图控制器名称中交换@已设置可测试的导入MyProject。如果我显式调用MyProject.MyViewController而不是MyViewController,那么测试结果就是我没有显式调用MyProject.MyViewController。我在github上上传了该项目,请随意查看
let viewController = UIStoryboard(
    name: "Main", bundle: Bundle.main).instantiateViewController(
    withIdentifier: "ViewController") as? ViewController
XCTAssertNotNil(viewController)