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

Unit testing 如何从XCTest中的UI目标调用主目标中的方法?,unit-testing,methods,xctest,xcode-ui-testing,Unit Testing,Methods,Xctest,Xcode Ui Testing,在提出问题之前,我应该这样说。我对Xcode中UI测试的理解: UI测试仅用于自动化UI工作流程 最终用户无法访问原始源。同样,UI测试无法访问应用程序的源代码 在UI测试用例中只能访问元素属性/标识符 我的场景: 我想从UI测试用例的源代码中调用视图控制器中的方法(比如myMethod())(比如MyVC.h/MyVC.m) 注意:我的源代码是用Objective C编写的,我正在用Swift编写测试用例 根据我的理解,要做到这一点,我还应该在UITest target中添加MyVC.m(

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

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

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

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

根据我的理解,要做到这一点,我还应该在UITest target中添加
MyVC.m
(我们不能在目标中添加.h)。然后我需要在UITest桥接文件中导入
MyVC.h
。然后我可以从UITest调用
myMethod()
,如下所示:

MyVC.myMethod()
它会起作用的

问题:

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

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

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

我的尝试:

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

我应该在主源的所有文件中添加所有需要的文件头吗

有人遇到过这种错误吗?有人通过UI测试访问DB吗?

两件事:

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

我认为第二点可能与您的需求无关,因为从关于从UI测试中点击数据库的一点可以看出,您似乎不需要应用程序中的特定对象,只需要该类的一个对象来获取出于某种原因在其上声明的一些DB访问方法。为此,只要能够在类中编译、实例化和发送消息就足够了。(不过,通过将那些与DB相关的方法分解为非UI类,您的生活可能会更轻松。)

看看这个答案,您为什么要从UI测试中访问应用程序代码?你的测试场景是什么?@jeremy-w-sherman你有没有关于UI测试中本地套接字的示例或知识可以分享?将这样的东西集成到iOS UI开发工作流中会非常有趣。