В тестовой цели X обнаружена ошибка (раннее неожиданное завершение, операция не завершилась при загрузке - перезапуск не будет предпринят

Я начал работать с OCMock, чтобы написать контрольные примеры для существующего проекта, который я интегрировал в свое рабочее пространство проекта. После выполнения всех шагов, упомянутых в этой ссылке

Когда я впервые выполнил свой тестовый пример, он дал мне эту ошибку. Я искал его и пытался следовать некоторым решениям, таким как "создание новой цели","перезапуск XCode", но это мне не помогло. Любая идея?

19 ответов

Решение

У меня есть мои заметки и демонстрационные приложения для Cocoapods и Карфагена здесь https://github.com/onmyway133/TestTarget

  • Убедитесь, что все фреймворки связаны с целями тестирования
  • конфигурировать Runpath Search Paths указать на $(FRAMEWORK_SEARCH_PATHS)

Больше информации

Я использую Carthage, и проблема для меня заключалась в поиске зависимостей в тестовой цели. Fix:

добавлять $(PROJECT_DIR)/Carthage/Build/iOS в Runpath Search Paths

Вы можете найти ссылку здесь: проблема Карфагена

Может быть другое решение, если вы используете CocoaPods и цель теста пользовательского интерфейса встроена в цель приложения, что, к сожалению, имеет место в шаблоне по умолчанию (pod init).

Попробуйте переместить цель теста пользовательского интерфейса из цели приложения следующим образом:

от:

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

Мое решение состояло в том, чтобы добавить "фазу копирования файла" к моей цели теста. Там я установил пункт назначения Frameworks и добавил свой фреймворк со знаком +.

В моем случае не было ничего плохого в связанных файлах. Симулятор застрял в сообщении, которое сработало приложение, например: "Имя приложения хотело бы отправлять вам уведомления". Нажал ОК и в следующий раз мои XCTests работали нормально.

Просто чтобы поделиться своим опытом об этой ошибке:

Я использую fastlane + cocoapods.

У меня есть рабочее пространство с 2 динамическими структурами:

  • A.framework
  • B.framework

зависимости:

  • А зависит от AFNetworking с использованием cocoapods
  • B зависит от A

Зависимости определены в Podfile.

Ошибка возникла при выполнении тестов фреймворка B.

В моем случае проблема была связана с отсутствующей зависимостью от AFNetworking в цели B.framework.

Добавление зависимости pod к AFNetworking в B.framework в Podfile, все было решено.

Таким образом, даже если цель B успешно компилируется, AFNetworking не был встроен в приложение B test, и симулятор не смог запустить приложение B test, что вызвало эту "очень значимую" (*) ошибку.

(*) спасибо Apple за это!

Мой случай был особенным. Я использовал 2 файла в качестве тестовых классов. один работал отлично, а другой имел эту ошибку.
Обе ссылки на одну и ту же основу.

Решение

ОЧИСТИТЬ ПРОИЗВОДНЫЕ ДАННЫЕ

Окно => Проекты => Удалить (в вашем проекте)

Удачи и счастливого тестирования!

Ничего себе, я потратил много времени на это, в моем тестовом пакете было выбрано "Хост-приложение" для моего приложения. Других тестовых комплектов не было.

Я ожидаю, что это решение не может быть правильным решением для каждой ситуации, но мои тесты были в основном для тестирования динамической библиотеки, и для ее запуска не требовалось хост-приложение. Я получил вышеупомянутую ошибку, отключив ее, я смог запустить тесты без этой ошибки, и точки останова сработали. Я работал под MacOS, но, вероятно, он похож на другие среды. Я ожидаю, что это решение не может быть правильным решением для каждой ситуации, но мои тесты были в основном для тестирования динамической библиотеки, и для ее запуска не требовалось хост-приложение.

В тестовом комплекте выберите "Основные" -> "Тестирование" -> установите "Хост-приложение" на "Нет".

У меня была та же проблема, и я уже попробовал все предложенное здесь, но безуспешно.

Запуск тестов на другом симуляторе решил проблему для меня. После этого оригинальный симулятор также больше не вызывал сбоев.

В моем случае я не добавил фазу Run Script для библиотек Quick и Nimble, которые я интегрировал с помощью Carthage.

В моем случае для Build Active Architecture Only было установлено значение YES.

В проекте и целях: Настройки сборки -> Архитектура -> Только активная архитектура сборки должна быть НЕТ вместо ДА

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

Во время создания Cocoa Touch Framework каждая попытка запустить тестирование заканчивалась тем же сообщением об ошибке, что и OP.

Я исправил это, изменив конфигурацию сборки TEST с Debug на Release.

Шаг 1

Шаг 2

Шаг 3

Примечание: не было необходимости в дополнительной настройке Runpath Search Paths,

Я использую Cocoapods в версии 1.6.1 и Xcode 10.1

Если кто-то все еще испытывает эту проблему, этот ответ помог мне. Установите для параметра " Всегда вставлять стандартные библиотеки Swift" значение " Нет" в настройках проекта. Я сделал это для цели тестирования пользовательского интерфейса.

Хотел бы поделиться своим ответом, надеюсь, это может сэкономить кому-то время.

Для меня.m файл не был должным образом связан в Фазы сборки - > Компиляция источников

Переход с Xcode 9.4.1 на Xcode 10.1 решил проблему в моем случае.

Для меня проблема заключалась в файле Pod
Я сделал новую цель, но забыл добавить цель в файл pod

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

просто добавьте цель в файл pod исправили проблему

Есть некоторые автоматически добавленные настройки проекта, которые идут с Xcode 10, и они приходят время от времени, а не все время. После загрузки Xcode 10 перезагрузите компьютер. Вот что исправило это для меня. Ни один из этих ответов не исправил это для меня. Надеюсь, это поможет. Я хотел бы дать лучший ответ.

В моем случае мои Настройки сборки -> Архитектура настраивались только для armv7, и я изменил на ARCHS_STANDARD, который был таким же, как и у моего хост-приложения.

Для меня мне пришлось "Доверять" разработчику в "Управление устройством" в "Настройки -> Общие" на моем устройстве. (Настройки -> Общие -> Управление устройствами -> DeveloperID -> "Доверить приложение"). Когда я запускал приложение через боковую загрузку, используя мой идентификатор Apple.

В моем случае я объявил свойство как только для чтения в заголовочном файле:

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

но я забыл добавить это объявление в.m, чтобы сгенерировать сеттер:

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

Глупая ошибка, не совсем уверенная, почему она проявляется в этой ошибке, но добавление этой строки в.m решило проблему.

В моем случае мне пришлось удалить $(inherited) от других флагов линкера в моей тестовой цели. Я установил статические библиотеки через cocoapods.

В моем случае была проблема с моим приложением в симуляторе. До того, как возникла проблема, я обработал db-миграцию (область), которая потерпела неудачу и уничтожила мою базу данных. Так что у меня все работало нормально после того, как я удалил приложение на симуляторе.

В моем случае у меня был полностью чистый проект с пустыми тестами по умолчанию. Если я добавил какой-либо модуль, я получил эту ошибку. Решение было в том, что хотя бы один файл в Test target должен импортировать 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.
        }
    }

}
Другие вопросы по тегам