XCode 11.4 XCTest - фиктивный объект не видит удобный инициализатор из реального класса объекта

Я пытаюсь понять, есть ли что-то в рамках XCTest, что не позволяет моему тестовому классу видеть инициализатор удобства, определенный в классе для модуля, который я тестирую? Я использую импорт @testable для переопределения и подкласса закрытых классов.

Раньше тесты работали корректно. Это какая-то ошибка XCode 11.4?

У меня есть несколько версий этой ошибки, каждый раз, когда это удобный инициализатор, даже если он объявлен общедоступным.

Ошибка: отсутствует аргумент для параметра "репозиторий" в вызове

//Inside FrameworkModule

public class RealObject {

    init(repository: SomeRepository) {
       //designated initializer
    }


    convenience override init() {
    // Use default repository
    }
}

//Inside Test class:
@testable import FrameworkModule

class MockObject: RealObject {
    //Inherits initializers from RealObject

}

class TestHelper: NSObject {   
var mockObject: MockObject!

}
    override init() {
       mockObject = MockObject() //Error Missing argument for parameter 'repository' in call
    }
}

person Alex Stone    schedule 11.05.2020    source источник


Ответы (1)


Я борюсь с той же проблемой и обнаружил, что это связано с изменением, упомянутым в Xcode примечания к выпуску 11.4.

Удобство наследования инициализатора для подклассов, определенных вне модуля, определяющего базовый класс, теперь имеет дополнительные ограничения. Когда у этих подклассов есть базовый класс с непубличными назначенными инициализаторами, они больше не наследуют автоматически удобные инициализаторы от своих суперклассов. Чтобы восстановить это автоматическое поведение наследования, базовый класс должен убедиться, что все назначенные ему инициализаторы являются общедоступными или открытыми. (51249311)

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

person jeffctown    schedule 22.05.2020