Unit testing 如何从XCTest中的UI目标调用主目标中的方法?
在提出问题之前,我应该这样说。我对Xcode中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(
- 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测试调用测试应用程序中的方法。UI测试在与应用程序不同的进程中运行,因此您不能仅访问应用程序中的对象。您需要通过添加可访问的UI来移动带内触发器,或者装配一个侧通道,这可以通过使用本地套接字来实现
我认为第二点可能与您的需求无关,因为从关于从UI测试中点击数据库的一点可以看出,您似乎不需要应用程序中的特定对象,只需要该类的一个对象来获取出于某种原因在其上声明的一些DB访问方法。为此,只要能够在类中编译、实例化和发送消息就足够了。(不过,通过将那些与DB相关的方法分解为非UI类,您的生活可能会更轻松。)看看这个答案,您为什么要从UI测试中访问应用程序代码?你的测试场景是什么?@jeremy-w-sherman你有没有关于UI测试中本地套接字的示例或知识可以分享?将这样的东西集成到iOS UI开发工作流中会非常有趣。