XCTests преждевременная отмена

Я запускаю несколько модульных тестов внутри Xcode с XCTests. Когда я их запускаю, все тесты либо проходят, либо не проходят, и отображается маленькая зеленая галочка или красный крестик. Основная проблема заключается в том, что мои тесты преждевременно отменяются и они не выполняются должным образом.

Вот дополнительная информация:

  1. Когда тесты запускаются, нет никакого вывода на консоль, чего не было раньше. Под этим я подразумеваю, что раньше у меня был ожидаемый вывод консоли, а теперь нет.
  2. Когда тесты запускаются, мне не требуется разблокировать мой iPhone, чтобы приложение могло работать. Более того, даже если мой iPhone разблокирован, он не запускает приложение, которое выполнялось бы раньше.
  3. При выполнении моих тестов компиляция завершается, а затем очень быстро появляется сообщение «Отмена ...» на информационной панели в Xcode (верхняя центральная панель, отображающая предупреждения и «Сборка» при сборке проекта).

  4. Я использую файл .xcworkspace (потому что я использую Pods)

  5. У меня есть одна схема сборки - это проект.
  6. У меня были те же проблемы, плюс проблемы с зелеными флажками и красными крестиками, которые не отображались в моих тестах после их запуска, а иногда мои тесты вообще не отображались на вкладке тестирования. Я исправил эти проблемы, удалив файл Podfile.lock, каталог Pods и каталог .xcworkspace, а затем запустив установку Pod. После этого у меня возникли те же проблемы, за исключением этих двух.
  7. Я пробовал запускать новые тесты в другой ветке, проблемы те же.
  8. Прежде чем столкнуться с какой-либо из этих проблем, я просто писал тесты и пробовал разные методы написания тестов. Я отменил все эти изменения, но все еще получаю эти ошибки.

  9. Я также обнаружил те же проблемы при запуске тестов без симулятора.

  10. Когда я компилирую и запускаю приложение из Xcode, оно работает нормально.

Любые советы о том, как решить эту проблему, были бы замечательными! При необходимости запросите более подробную информацию.

Вот видео, на котором я провожу тесты. Я создал новый проект и новую цель модульного тестирования, чтобы показать, что происходит. Примечание. Там есть пустой тест и тест, который всегда должен проходить:

введите описание изображения здесь

Как видите, проблема в том, что тесты не работают должным образом. Зеленый и красный кресты больше не отображаются, тест, который должен всегда проходить, не проходит, нет вывода на консоль, а в верхней панели информации почти сразу же написано «отмена ...». Было бы здорово посоветовать, почему происходит отмена!

Вот несколько скриншотов того, как настроен код:

введите здесь описание изображения  введите описание изображения здесь

Вот и код (это просто базовый код после создания нового модульного теста, за исключением того, что я добавил одно утверждение, которое всегда должно проходить):

import XCTest
@testable import example

class exampleTests: 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.
        XCTAssertTrue(true)
    }

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

Изменить:

Итак, согласно предложению @CPR, я снова попробовал это на симуляторе, и в основном все ошибки исчезли. Я попробовал еще раз на физическом устройстве, но ошибки не исчезли. Примечание. Я пробовал это раньше на симуляторе и получил те же ошибки. С тех пор я ничего не менял, поэтому я не уверен, почему это сработало сейчас. Вот вывод консоли после запуска тестов на сим-карте (не уверен, что это поможет, но я все равно добавлю его):

Test Suite 'All tests' started at 2018-12-06 03:59:53.045
Test Suite 'exampleTests.xctest' started at 2018-12-06 03:59:53.046
Test Suite 'exampleTests' started at 2018-12-06 03:59:53.046
Test Case '-[exampleTests.exampleTests testExample]' started.
Test Case '-[exampleTests.exampleTests testExample]' passed (0.001 seconds).
Test Case '-[exampleTests.exampleTests testPerformanceExample]' started.
/Users/akashkundu/Documents/example/exampleTests/exampleTests.swift:30: Test Case '-[exampleTests.exampleTests testPerformanceExample]' measured [Time, seconds] average: 0.000, relative standard deviation: 115.251%, values: [0.000004, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001], performanceMetricID:com.apple.XCTPerformanceMetric_WallClockTime, baselineName: "", baselineAverage: , maxPercentRegression: 10.000%, maxPercentRelativeStandardDeviation: 10.000%, maxRegression: 0.100, maxStandardDeviation: 0.100
Test Case '-[exampleTests.exampleTests testPerformanceExample]' passed (0.348 seconds).
Test Suite 'exampleTests' passed at 2018-12-06 03:59:53.396.
     Executed 2 tests, with 0 failures (0 unexpected) in 0.348 (0.350) seconds
Test Suite 'exampleTests.xctest' passed at 2018-12-06 03:59:53.396.
     Executed 2 tests, with 0 failures (0 unexpected) in 0.348 (0.350) seconds
Test Suite 'All tests' passed at 2018-12-06 03:59:53.397.
     Executed 2 tests, with 0 failures (0 unexpected) in 0.348 (0.351) seconds 

Может ли кто-нибудь пролить свет на то, почему выполнение тестов на физическом устройстве вызывает эти ошибки?

Изменить:

Вот сообщение об ошибке / журнале из вкладки «Сообщения» в Xcode, найденное @CPR:

введите описание изображения здесь

Вот код ошибки / журнала в тексте:

example.app encountered an error (Failed to establish communication with the test runner. (Underlying error: Unable to connect to test manager on 8b441d96d063b3b6abf55b06115441d160e85e67. (Underlying error: kAMDMuxConnectError: Could not connect to the device.)))

-----------------------------------------------------------------------

Решение:

Благодаря @CPR решение состоит в том, чтобы просто перезагрузить устройство. Еще один усвоенный урок - это использовать вкладку «Сообщения» для просмотра журналов и ошибок, которая является самой правой вкладкой рядом с вкладкой «Точка останова».

Его полный ответ здесь.


person Akash Kundu    schedule 06.12.2018    source источник
comment
Слишком широкий. Пожалуйста, задавайте по одному вопросу за раз.   -  person matt    schedule 06.12.2018
comment
@matt Хорошо, я сузил круг вопросов   -  person Akash Kundu    schedule 06.12.2018
comment
@matt Сузил все до одного вопроса, теперь все в порядке?   -  person Akash Kundu    schedule 06.12.2018
comment
Проще всего было бы опубликовать тестируемый класс и код неработающего теста. Я бы посоветовал взглянуть на работу Брайана Моакли на RayWenderlich.com. Кроме того, на WWDC 2017 было хорошее видео о модульном тестировании на веб-сайте Apple. То, что вы разместили здесь, довольно обширно, и это может быть миллиард вещей.   -  person Adrian    schedule 06.12.2018
comment
Вы получаете ошибки компилятора в тестовом классе? Вы использовали @testable import <blah blah>? Имеются ли ваши методы тестирования с префиксом test (например: func testMyWidgetString() { / / your test code }   -  person Adrian    schedule 06.12.2018
comment
@ Адриан Хорошо, я постараюсь уточнить это! Но чтобы ответить на ваши вопросы, я не получаю никакого вывода, то есть ошибок компилятора нет, потому что нет вывода на консоль. Да, я добавил «@testable», и да, моя тестовая схема именования в порядке!   -  person Akash Kundu    schedule 06.12.2018
comment
@AkashKundu Почтовый индекс. Вы увидите это. Вам не нужно публиковать весь класс, но достаточно, чтобы люди могли сказать: да ... Я вижу, что он пытается сделать. Также опубликуйте свой тестовый метод из своего класса XCTestCase   -  person Adrian    schedule 06.12.2018
comment
@ Адриан Хорошо, код готовится!   -  person Akash Kundu    schedule 06.12.2018
comment
@Adrian Хорошо, видео и код готовы! Сообщите мне, если мне понадобится больше!   -  person Akash Kundu    schedule 06.12.2018
comment
Вы пробовали устанавливать точки останова в своих тестах, чтобы увидеть, попадут ли они? Также попробуйте использовать симулятор вместо своего устройства и посмотрите, не изменится ли что-нибудь.   -  person CPR    schedule 06.12.2018
comment
@CPR Итак, я действительно получил те же ошибки на симуляторе и на моем физическом телефоне, но я просто попробовал снова, и он работает на моем симуляторе! Однако я попробовал еще раз на своем телефоне и получаю те же ошибки. Я отредактирую вопрос и добавлю результаты теста симулятора. Спасибо! По крайней мере, теперь мы знаем, что это как-то связано с запуском на реальном устройстве. Есть идеи, как я могу это исправить?   -  person Akash Kundu    schedule 06.12.2018
comment
Я думаю, что видел подобные вещи в прошлом, когда у меня были проблемы с подписью кода в моем проекте. Правильно ли настроены ваши сертификаты? У вас есть действующая учетная запись разработчика Apple? Это также может быть проблема с кабелем (или проблема с сетевым подключением, если вы используете беспроводную отладку). Тот же вопрос к вам снова: вы видите, что точки останова срабатывают, когда вы запускаете его на устройстве? Другой код (не тесты) успешно выполняется на устройстве?   -  person CPR    schedule 06.12.2018
comment
@CPR Прошу прощения за то, что не ответил на ваш вопрос в первый раз. Точки останова достигаются на симуляторе, но не на устройстве. Затем другой код (не тесты) запускается на симуляторе и на физическом устройстве, как и ожидалось. Я проверил оба из них только сейчас, поэтому могу с уверенностью подтвердить их точность! Вы сделали интересное замечание по поводу моих сертификатов. Я проверил их в Xcode и на сайте разработчиков Apple, и, похоже, никаких ошибок нет. Вы знаете что-нибудь, на что я должен обратить особое внимание?   -  person Akash Kundu    schedule 06.12.2018
comment
@AkashKundu Я не могу придумать, что еще проверить, но пока Xcode не жалуется на недействительные сертификаты, все должно быть в порядке. Еще несколько вопросов: есть ли у вашей тестовой цели какие-либо настраиваемые этапы выполнения сценария? Выбрана ли у вас схема тестирования в Xcode при запуске тестов? Попробуйте удалить приложение с устройства, выполните очистку папки сборки в Xcode и перезапустите. Также попробуйте создать новую тестовую схему / цель, содержащую ваши тестовые файлы, и запустите ее. Это может решить проблему, если в вашей схеме есть ошибки.   -  person CPR    schedule 06.12.2018
comment
Также должны быть некоторые журналы в представлении сообщений в Xcode, показывающие результат сборки. Вы что-нибудь видите здесь, когда работаете на устройстве? Вы можете попробовать создать новые профили обеспечения / сертификаты через портал разработчика Apple на всякий случай, если проблема связана с профилем.   -  person CPR    schedule 06.12.2018
comment
@CPR О, я даже не знал о вкладке "Сообщения". Вот ошибка, которую я получаю (я также обновлю вопрос). В example.app произошла ошибка (не удалось установить связь с средством запуска тестов. (Основная ошибка: невозможно подключиться к диспетчеру тестов на 8b441d96d063b3b6abf55b06115441d160e85e67). (Основная ошибка: kAMDMuxConnectError: Не удалось подключиться к устройству.)))   -  person Akash Kundu    schedule 06.12.2018
comment
Вы пробовали перезагрузить устройство?   -  person CPR    schedule 06.12.2018
comment
@CPR Перезагрузил, все работает нормально. Старый добрый, включай и выключай. Большое спасибо!   -  person Akash Kundu    schedule 06.12.2018
comment
Рад это слышать!   -  person CPR    schedule 06.12.2018
comment
@CPR Если вы захотите ответить на вопрос, я его приму!   -  person Akash Kundu    schedule 06.12.2018
comment
Чего стоит: я никогда не запускаю тесты на устройстве.   -  person Jon Reid    schedule 07.12.2018
comment
@JonReid Есть ли причина не запускать на устройстве?   -  person Akash Kundu    schedule 07.12.2018
comment
@AkashKundu Скорость. Моя цель в проведении тестов - быстрая обратная связь.   -  person Jon Reid    schedule 08.12.2018


Ответы (1)


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

  1. Проверьте вкладку сообщений Xcode, чтобы найти ошибки сборки.
  2. При необходимости перезапустите устройство / симулятор. Это устранило проблему в данном случае.
  3. Удалите / переустановите приложение на устройстве / симуляторе.
  4. Действительны ли сертификаты / профили обеспечения? Попробуйте создать новые и запустить заново.
  5. На тренажере работает? Если да, скорее всего, проблема связана с самим устройством.
  6. Бывают ли точки останова при запуске кода? Если да, то это провал теста. Если нет, проблема возникает еще до запуска тестов (как здесь).
person CPR    schedule 06.12.2018