我可以将XCUITest目标链接到其他项目的应用程序目标,还是可以在UI测试包目标之外使用XCTest / XCUITest?

时间:2019-01-31 02:01:56

标签: xcode xctest xcuitest

我目前正在Xcode工作区中构建一个包含3个现有项目的测试套件。 2个应用程序项目和一个通用框架项目。两种应用在用户界面方面都非常相似,但有一些细微差别。

我正在尝试找到一种方法来与 App B 共享我为 App A 创建的XCUITest框架。

当前,应用A 在其AppA.xcodeproj中设置了测试目标。 App A 的所有测试都非常出色且易于维护。我需要将此扩展到 App B ,并将 App A 的框架重构为仅App A专有位,因此 App A 应用B 可以从一个中央库共享通用的XCUITest框架代码库。

我尝试创建一个新项目,将其移至UI测试代码上,并将新的UI Test目标指向 App A 的可执行文件,但我不知道如何获得该选项显示。 我在“新项目”的测试目标>“构建阶段”选项卡中将 App A 应用设置为目标依赖项,但是没有运气。我可以在新测试目标的方案中设置 App A 的目标,但仍然遇到错误。

Assertion Failure: CommonBasePage.swift:21: failed: caught "NSInternalInconsistencyException", 
"No target application path specified via test configuration: <XCTestConfiguration: 0x60400014e910>
                      testBundleURL:file:///Users/user.name/Library/Developer/Xcode/DerivedData/.../Debug-iphonesimulator/NewTestTarget-Runner.app/PlugIns/NewTestTarget.xctest/
             testBundleRelativePath:(null)
                  productModuleName:NewTestTarget
                        testsToSkip:(null)
                         testsToRun:NewBasePage/testExample
                 reportResultsToIDE:YES
                  sessionIdentifier:<>
         pathToXcodeReportingSocket:(null)
          disablePerformanceMetrics:no
    treatMissingBaselinesAsFailures:no
                    baselineFileURL:(null)
           baselineFileRelativePath:(null)
              targetApplicationPath:(null)
          targetApplicationBundleID:(null)
     testApplicationDependencies:
{... 

我假设targetApplicationPath:(null),targetApplicationBundleID:(null)应该具有合法的目标值,但是我不确定要设置它们的其他位置。

我放弃了这一尝试,试图创建一个新项目和目标作为Cocoa Touch Framework,以将通用代码转移到一个中心点,但是却无法导入XCTest,我的框架所依赖的XCTest是XCUIApplication和XCUIElement字段。
import XCTest //Causes "Cannot load underlying module for 'XCTest'"
在构建阶段,我尝试将XCTest.framework添加到目标“使用库链接二进制文件”部分,但没有运气。

是否有一种方法可以在测试目标之外使用XCTest框架?
OR
有没有办法将一个项目的测试目标指向另一个项目的应用程序目标?

1 个答案:

答案 0 :(得分:2)

您可以将XCTest和任何其他框架链接到任何东西。确保在$(PLATFORM_DIR)/Developer/Library/FrameworksLD_RUNPATH_SEARCH_PATHS中都包含FRAMEWORK_SEARCH_PATHS

为共享代码创建框架是一个好主意。