Создать Generi c Base XCTestCase не считается закрытым кодом - PullRequest
3 голосов
/ 26 марта 2020

В моем проекте много моделей, которые Decodable. Я должен написать тесты, чтобы гарантировать их разбор из json.

. Что я сделал:

  1. Создайте папку для хранения моих поддельных json файлов для тестов.
  2. Создайте BaseModelTests<T>: XCTestCase where T: Decodable, где у меня есть один метод, который загружает json и пытается проанализировать модель.
  3. Создайте все необходимые классы для проверки каждого имеющегося у меня Decodable.
  4. Запустите тесты, которые работают нормально.

Проблема в том, что по какой-то причине Xcode не рассматривает эти тесты как "покрытие кода", фактически у меня установлено покрытие для файлов 0% Я проверял. Как это возможно? enter image description here

Я что-то забываю или ошибаюсь или просто 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)
    }
}
...