测试目标X遇到错误(早期意外退出,操作从未完成引导-不会尝试重新启动


77

我已经开始OCMock为集成在项目工作区中的现有项目编写测试用例。完成此链接中提到的所有步骤之后。

当我第一次执行测试用例时,出现了上面的错误。我搜索了它,并尝试遵循一些解决方案,例如创建新目标重新启动Xcode,但这并没有帮助我。任何的想法?


1
这些说明可以工作。根据您提供的信息,无法诊断问题。请转到生成输出(cmd-8),在左侧选择“测试”条目,然后在右侧选择顶部的“日志”,然后右键单击下面的“测试目标X”,选择“复制副本”。 “ .. as text”(将文本复制到剪贴板上。验证其中的内容,并分享您可以/认为相关的内容。
Erik Doernenburg

出现上述错误的原因:“ .m文件未在Build Phases-> Compile Sources下链接”。但是现在在添加-ObjC标志作为其他链接器标志之后,出现了另一个错误“符号_OBJC_METACLASS _ $ _ <类名称重复:”。
Varun Mehta

如文档中所述,您只应链接一次库。
Erik Doernenburg '16

@ErikDoernenburg您可以在这里帮助我吗。我无法确定原因
iKushal

Answers:


120

我在这里有关于Cocoapods和Carthage的笔记和演示应用程序https://github.com/onmyway133/TestTarget

  • 确保所有框架都链接到测试目标
  • 配置Runpath Search Paths指向$(FRAMEWORK_SEARCH_PATHS)

更多信息


11
添加$(FRAMEWORK_SEARCH_PATHS)Runpath Search Paths我的工作。干杯!
NSTJ

1
嘿,也为我解决了问题:)您能再说明点什么吗?
Tiziano Coroneo

3
谢谢!它起作用了,只是想指出运行路径搜索路径应该在框架目标中设置,而不是在测试目标中设置
Bretsko '18

天哪,这对我也有帮助!谢谢!
Baran Emre

天哪,你呢?配置Runpath Search Paths指向对$(FRAMEWORK_SEARCH_PATHS)我有帮助。
博格丹

17

我正在使用迦太基,而我的问题是在测试目标中搜索依赖项。固定:

添加$(PROJECT_DIR)/Carthage/Build/iOSRunpath Search Paths

您可以在这里找到参考:迦太基问题


1
这为我解决了这个问题,非常感谢!测试未在我的macOS目标上运行,因此我添加了$(PROJECT_DIR)/Carthage/Build/Mac
基利安

11

如果您使用的是CocoaPods,并且UI测试目标嵌入在应用程序目标中,那么可能还有另一种解决方案,不幸的是,默认模板(pod init)中就是这种情况。

尝试将UI测试目标移出应用目标,如下所示:

从:

platform :ios, '11.0'
use_frameworks!

target 'MyApp' do
  # Pods for MyApp

  target 'MyAppUITests' do
    inherit! :search_paths
    # Pods for testing

  end
end

至:

platform :ios, '11.0'
use_frameworks!

# Pods shared between MyApp and MyAppUITests    

target 'MyApp' do
    # Pods for MyApp only

end

target 'MyAppUITests' do
    # Pods for testing

end

信誉归功于此期主题中的SpacyRicochet:https//github.com/CocoaPods/CocoaPods/issues/4752#issuecomment-305101269


非常感谢!但是...为什么这样做呢?并用cocoapods跟踪此错误吗?
山姆

@Sam,对不起,我也不知道为什么。我只是通过反复试验才找到此解决方案。您可能需要检查CocoaPods官方仓库以获取更多信息。
hujunfeng

我们发现一个cocoapod版本更新以及在项目(目标依赖)建立我们的依赖似乎教的CocoaPods我们的依赖性和这个..实际解决
萨姆

有趣。遇到问题时,我已经在使用最新的CocoaPods 1.5.3。UI测试目标的目标依赖性仅仅是应用程序目标。没有其他的。仍然我必须将Podfile更改为上面发布的方式,以便UI测试目标可以成功启动。
hujunfeng

两者都住在同一个项目中吗?
山姆

6

我的解决方案是在测试目标中添加“复制文件阶段”。在那里,我将目标设置为Frameworks,并用+号添加了我的框架。


谢谢,这对我来说很有帮助。这里是一个描述问题的文章medium.com/@greesce/...
巴尔托什Olszanowski

简而言之:递归地添加当前使用的所有框架。
Zaporozhchenko Oleksandr,

对我来说,UI测试可以在模拟器上正常运行,但不能在真实设备上运行。添加“复制文件阶段”有帮助,谢谢!
德米特里·辛金

5

就我而言,链接文件没有任何问题。模拟器有点卡在应用程序触发的消息上,例如:“应用程序名称希望向您发送通知”。按“确定”,下次我的XCTests运行正常。


5

只是分享我有关此错误的经验:

我正在使用fastlane + cocoapods。

我有一个带有2个动态框架的工作区:

  • 框架
  • B.框架

依存关系:

  • 通过AFNetworking使用cocoapods来确定
  • B取决于A

依赖关系在Podfile中定义。

执行框架B测试时引发错误。

就我而言,问题与B.framework目标中缺少对AFNetworking的依赖关系有关。

在Podfile的B.framework中向AFNetworking添加一个pod依赖项,所有问题都已解决。

因此,即使目标B成功编译,AFNetworking也不会嵌入到B测试应用中,并且模拟器也无法运行B测试应用,从而引发此“非常有意义”(*)错误。

(*)感谢Apple!



2

哇,我在此上浪费了很多时间,我的测试包选择了“主机应用程序”作为我的应用程序。其他测试包则没有。

我希望该解决方案可能不是适合每种情况的正确解决方案,但是我的测试主要是为了测试动态库,并且它实际上并不需要运行主机应用程序。我遇到上述错误,将其关闭可让我在不出现该错误的情况下运行测试,并且断点有效。我正在运行MacOS,但在其他环境中可能也是如此。我希望该解决方案可能不是适合每种情况的正确解决方案,但是我的测试主要是为了测试动态库,并且它实际上并不需要运行主机应用程序。

在测试包上,转到“常规”->“测试”->“主机应用程序”设置为“无”。


2

就我而言,我没有为Quick和Nimble库添加运行脚本阶段,该阶段是我使用Carthage集成的。


2

我遇到了同样的问题,已经尝试了这里提出的所有建议,但都没有成功。

在其他模拟器上运行测试对我来说解决了这个问题。在那之后,原来的模拟器也不再导致失败。


2

我的情况很特别。我使用2个文件作为测试类。一个工作完美,另一个出现该错误。
两者都链接到相同的框架。

明确的数据

窗口=>项目=>删除(在您的项目中)

祝您好运,测试愉快!


1
I tried many different options but none helped me except below and wasted lot of time, posting this so that really help and save time on this: 

Follow all of the instructions for Full Manual Configuration

https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md#full-manual-configuration
Tips
When you come to the part where you are executing xcodebuild, if the build fails, and the log mentions "RoutingHTTPServer" or "YYCache", add these two frameworks on the Build Phases tab of the WebDriverAgentRunner target
Open the WebDriverAgent.xcodeproj

Select 'Targets' -> 'WebDriverAgentRunner'

Open 'Build Phases' -> 'Copy frameworks'

Click '+' -> add RoutingHTTPServer

Click '+' -> add YYCache
https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-382344697
https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-383362376

The build/test may also fail due to the WebDriverAgentRunner app/developer being untrusted on the device. Please trust the app and try again.

While trying to access the WebDriverAgent server status, if it tries to connect on port 0, hardcode port 8100 in appium-xcuitest-driver/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.m

Original line: server.port = (UInt16)port;
New line: server.port = 8100;
https://github.com/facebook/WebDriverAgent/issues/661#issuecomment-338900334

1

在我创建Cocoa Touch Framework的过程中,任何运行测试的尝试都以与OP相同的错误消息结束。

我通过将TEST的构建配置从Debug更改为Release来修复它。

步骤1

在此处输入图片说明

第2步

在此处输入图片说明

第三步

在此处输入图片说明

注意:不需要任何额外的配置Runpath Search Paths

我正在1.6.1和Xcode 10.1中使用Cocoapods


很奇怪。这在一个项目(使用相同版本)中也对我有效,但另一个项目使用Debug配置测试🤷🏻‍♂️也很好用
phatblat

1

如果有人仍然遇到此问题,答案对我有帮助。设置总是嵌入斯威夫特标准库,以没有在项目设置。我这样做是为了UI测试目标。



0

就我而言,我已在头文件中将属性声明为只读:

// In .h file
@property (nonatomic, readonly) NSUInteger count;

但是我忘了将此声明添加到.m中,这样会生成一个setter:

// In .m file
@property (nonatomic, assign) NSUInteger count;

愚蠢的错误,不能完全确定为什么会在此错误中出现,但是在.m中添加该行可以解决此问题。


0

就我而言,我的Build Settings-> Architectures仅针对armv7进行设置,而我更改了ARCHS_STANDARD,与我的Host Application相同


0

对我来说,我必须在设备上“设置->常规”下的“设备管理”中“信任”开发人员。(设置->常规->设备管理->开发人员ID- >“信任应用程序”)当我使用Apple ID通过侧面加载运行应用程序时。


0

就我而言,我必须$(inherited)从ui测试目标中的“其他链接器标志”中删除。我已经通过cocoapods安装了静态库。


0

对我来说,问题是Pod文件,
我创建了一个新目标,但忘了在pod文件中添加目标

target 'mobilesdkIntegrationTests' do
  // write here any predefined pods if any, like
  testing_pods
end

只需在pod文件中添加目标即可解决此问题


0

Xcode 10附带了一些自动添加的项目设置,这些设置有时会出现,而并非总是会出现。下载Xcode 10后,重新启动计算机。这就是解决这个问题的原因。这些答案都没有为我解决。我希望这有帮助。我希望我能给出更好的答案。


0

从Xcode 9.4.1切换到Xcode 10.1解决了我的问题。


0

就我而言,我有一个完全干净的项目,带有默认的空测试。如果我添加了任何Pod,则会收到此错误。解决方案是测试目标中至少一个文件应导入Foundation

import XCTest
import Foundation

@testable import CVZebra

class CVZebraTests: XCTestCase {

    override func setUp() {
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }

    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
    }

    func testExample() {
        // This is an example of a functional test case.
        // Use XCTAssert and related functions to verify your tests produce the correct results.
    }

    func testPerformanceExample() {
        // This is an example of a performance test case.
        self.measure {
            // Put the code you want to measure the time of here.
        }
    }

}

0

就我而言,模拟器中的应用存在问题。在问题出现之前,我处理了一个数据库迁移(领域),该迁移失败并破坏了我的数据库。因此,在我删除模拟器上的应用程序后,一切对我来说都很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.