如何在XCTest中从UI目标调用主目标中的方法?

时间:2017-03-27 07:44:09

标签: unit-testing methods xctest xcode-ui-testing

在提出问题之前,我应该这样说。我对Xcode中UI测试的理解:

  • UI测试仅用于自动化UI工作流程
  • 最终用户无法访问原始来源。同样,UI测试无法访问应用程序的源代码
  • 在UI测试用例中只能访问元素属性/标识符。

我的情景:

我想在我的UI测试用例的源代码中调用视图控制器中的方法(Say myMethod())(说MyVC.h/MyVC.m)。

注意:我的源代码是用Objective C编写的,我在Swift中编写测试用例。

根据我的理解,要做到这一点,我应该在UITest目标中添加MyVC.m(我们不能将.h添加到目标)。然后我需要在我的UITest桥接文件中导入MyVC.h。然后我可以像这样从UITest拨打myMethod()

MyVC.myMethod()

它会起作用!!

问题:

实时,大多数类使用Util类,常量文件(头文件),从.pch文件导入的类,共享管理器等。

如果MyVC是一个独立的类,意味着不使用上述任何类,我可以毫无问题地访问myMethod()

但是,如果MyVC间接使用这些类,则运行UITest会在所有源代码中显示缺少的头文件错误。

我尝试了什么:

  • 要解决此问题,我通过将所有源文件添加到UI目标进行测试。仍然会出现这些问题。由于我无法添加.h文件
  • 我创建了单元测试类,我可以调用任何类的方法(因为单元测试类有一个选项“允许测试主机应用程序API”)。然后我尝试从UI测试用例访问Unit测试用例。这里也会在每个文件中发生相同的错误。

问题:

我应该在主要来源的所有文件中添加所有需要的文件标题吗?

有没有人遇到过这种错误?有人从UI测试中完成了数据库访问吗?

1 个答案:

答案 0 :(得分:1)

两件事:

  • 你的问题的后半部分似乎处理构建问题。对于那些,是的,您需要目标中的所有依赖项。
  • 问题的标题询问如何从UI测试中调用测试应用中的方法。 UI测试在与应用程序不同的进程中运行,因此您无法访问应用程序中的对象。您需要通过添加可访问的UI在带内移动触发器,或者设置一个侧面通道,这可能是使用本地套接字可行的。

我认为第二位可能对您的需求无关紧要,因为从UI测试中点击数据库会让您觉得您不需要应用程序中的特定对象,只是一个对象class来获取由于某种原因在其上声明的某些DB访问方法。为此,只需能够在类中进行编译并实例化并发送消息就足够了。 (但是,通过将这些与DB相关的方法分解为非UI类,您可能仍然可以让您的生活更轻松。)

相关问题