Ответ 1
Обновление Xcode стало доступным, и я обновил его, решив проблему.
Если у вас тоже есть эта проблема, проверьте ответ Мартина Ван Бурена, он не помог мне в этом деле, но стоит сделать снимок.
Я пытаюсь добавить тестовый объект в свой проект, однако, когда я запускаю тесты, кажется, что фактические тесты не выполняются, вместо этого Xcode сообщает об успехах всегда, но маленький квадрат, который указывает, прошел ли тест или нет, остается ясным.
У меня есть только одна тестовая цель и один класс:
@implementation Tests
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
XCTAssert(false, "");
}
- (void)testPerformanceExample {
XCTAssert(false, "");
}
@end
Тест должен завершиться неудачно, но он отображает всплывающее сообщение о успехе. Кроме того, в отчете об испытаниях нет тестов.
Если я пытаюсь выполнить тесты индивидуально, тесты "преуспевают", но я не получаю никакой информации о отчете, и квадрат остается пустым.
Любые идеи о том, как его исправить?
Обновление Xcode стало доступным, и я обновил его, решив проблему.
Если у вас тоже есть эта проблема, проверьте ответ Мартина Ван Бурена, он не помог мне в этом деле, но стоит сделать снимок.
Для всех, кто сталкивается с этой проблемой, убедитесь, что ваш тестовый класс наследуется от XCTestCase, а не XCTest. Я сошел с ума, пытаясь использовать все эти решения, пока не понял, что я наследую от неправильного класса. Xcode не жалуется, он просто скажет, что тесты удались без их запуска. Надеюсь, это поможет кому-то.
Если вы создаете для iOS, обычно у вас есть Xcode для запуска на физическом устройстве? Если да, попробуйте настроить его для запуска на iOS-симуляторе.
Я обнаружил, что если у вас установлен Xcode 7 на физическом устройстве, тестирование устройства будет вести себя так, как вы описали. Установка Xcode для запуска на iOS-симуляторе временно для модульного тестирования исправила проблему прямо, и теперь она работает как шарм.
Надеюсь, это поможет любому, кто сталкивается с той же проблемой.: D
Стоит упомянуть всех, кто придерживался этого в будущем: Xcode запускает только функции XCTestCase, которые начинаются с "теста". Это противоречит другим платформам и смутило меня, когда я начал тестировать в iOS.
В следующем классе:
class MyBigTest: XCTestCase {
func testSensibleInputReturnSensibleAnswer() {
XCTAssert(/* stuff */)
}
func someOtherTest() {
XCTAssert(/* some other stuff */)
}
}
Выполняется только testSensibleInputReturnSensibleAnswer()
.
Выключите устройство iOS, а затем снова включите питание. Вы также можете удалить USB-кабель и снова подключиться, чтобы Xcode мог восстановить связь с устройством. Когда это случится со мной, тест будет сообщать, что тест сразу же завершился без испытания. Я также заметил, что когда я пытался записать новое тестовое действие UI, которое Xcode разбивалось каждый раз - похоже на то, как он себя вел, прежде чем я впервые включил параметр iOS Settings - Developer - Enable UI Automation, и я вспомнил, что перезагрузка устройства iOS была необходима когда это было разрешено, поэтому я попробовал перезагрузить устройство iOS, и Xcode начал вести себя снова, где я мог успешно записывать и запускать тесты на устройствах iOS. Полное раскрытие информации: я также включил и включил автоматизацию пользовательского интерфейса, прежде чем перезагружать устройство iOS, но я сомневаюсь, что это было необходимо. -rrh
Проверьте консоль (Command-Shift-Y).
В моем случае был напечатан вывод, указывающий, почему тесты не выполнялись. (проверка перед полетом для динамических фреймворков была неудачной.) Но я не видел этого, потому что область отладки была разрушена.
Также в моем случае проблема была исправлена добавлением $(PROJECT_DIR)/Carthage/Build/iOS
к моим путям поиска во время выполнения, как описано здесь
У меня была такая же проблема, и очистка папки сборки решила бы ее. Однако существует еще более быстрый способ, выполняющий Product -> Perform Action -> Test Without Building
Старый вопрос, но вещи, которые его решили в моем случае, были упомянуты здесь:
Вы не можете (всегда?) переименовывать тестовые классы/случаи. Создайте новый класс/случай и выбросьте старый.
Если это для тестирования автоматизации пользовательского интерфейса, возможно, это связано с тем, что вы не инициализируете приложение и не запускаете его.
XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
FWIW У меня также была очень похожая проблема при использовании KIF beforeAll
. Иногда код, расположенный внутри beforeAll
, просто не работал, и все же тест вернется с успехом.
Это также иногда приводит к сбою Xcode. См. Страницу KIF Github здесь. Хотя некоторые из них отметили, что проблема может быть не из-за KIF, а скорее из-за самого XCTest
Временным решением было избежать использования beforeAll
и вместо этого использовать beforeEach
У меня был тестовый метод, помеченный как private
и что я решил, просто убрав модификатор private
доступа.