В моем проекте много моделей, которые Decodable
. Я должен написать тесты, чтобы гарантировать их разбор из json
.
. Что я сделал:
- Создайте папку для хранения моих поддельных json файлов для тестов.
- Создайте
BaseModelTests<T>: XCTestCase where T: Decodable
, где у меня есть один метод, который загружает json и пытается проанализировать модель. - Создайте все необходимые классы для проверки каждого имеющегося у меня Decodable.
- Запустите тесты, которые работают нормально.
Проблема в том, что по какой-то причине Xcode не рассматривает эти тесты как "покрытие кода", фактически у меня установлено покрытие для файлов 0% Я проверял. Как это возможно?
Я что-то забываю или ошибаюсь или просто XCode не может понять абстракцию?
Вот пример моя рутина:
class BaseModelTests<T>: XCTestCase where T: Decodable {
var model: T?
var jsonFileName: String { return "" }
func testParsingModel() {
guard let path = Bundle(for: type(of: self)).path(forResource: jsonFileName, ofType: "json") else {
XCTFail("Impossible to find the file \(jsonFileName).json needed to test \(T.self) initialization")
return
}
do {
let dataToDecode = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
model = try JSONDecoder().decode(T.self, from: dataToDecode)
} catch {
XCTFail("Failed the initialization of \(T.self)")
}
XCTAssertNotNil(model)
}
}
class MyClassTests: BaseModelTests<MyClass> {
override var jsonFileName: String { return "MyClass" }
override func testParsingModel() {
super.testParsingModel()
guard let model = model else { return }
XCTAssertTrue(model.accepted)
}
}