Я думаю, что выяснил, что делает покрытие XCTest, и это имеет некоторый смысл:
Моя установка:
class1 скомпилирован в target1
class2 скомпилирован в target1 и в target2
Испытательная установка:
import XCTest
@testable import target1
class MyTests: XCTestCase {
func testSomething() {
someMethodFromClass1()
someMethodFromClass2()
}
}
Я обнаружил, что class1 (скомпилированный в target1) показывает тестовое покрытие, а class2 (скомпилированный в target1 и target2) не показывает никакого тестового покрытия.
Поэтому мне кажется, что проверенный метод показывает покрытие 0, когда существует хотя бы одна цель, где этот метод не проверен.
И это имеет большой смысл, потому что тестирование метода в целевом объекте ничего не говорит о том, как он ведет себя в другом целевом объекте.
Apple хочет, чтобы мы проверили все цели.
Обновление Еще один намек в поддержку этой теории:
перейти к навигатору отчетов

и нажмите на покрытие.
Если у вас более одной цели, вы увидите, что ваши файлы сгруппированы по цели.
И если у вас есть один файл в двух целях, вы видите свой файл дважды.
Если у вас есть один файл в обеих целях, покрытие кода этого одного файла показано для обеих целей. И (по крайней мере, в моих проектах) один файл имеет разные синие линии в каждой цели:
охват в цели 1:

охват одного и того же файла в том же проекте в том же тестовом прогоне в цели 2:

Если вы посмотрите на свое тестовое покрытие в редакторе исходного кода, Apple должна решить, какое покрытие она вам покажет. Я думаю, что показать цель с наименьшим охватом — это лучшее, что Apple может сделать в редакторе исходного кода.
простое исправление для особого случая:
Если ваша единственная вторая цель — это ваша тестовая цель: не компилируйте в свою тестовую цель и используйте @testable import.
Во всех остальных случаях вы должны протестировать каждую цель.
person
Gerd Castan
schedule
22.07.2015