Внедрение зависимостей, фиктивные объекты для модульного тестирования и аргументы по умолчанию - PullRequest
0 голосов
/ 10 июля 2020

Я знаю, что внедрение зависимостей идеальным способом - это внедрение зависимостей через init () и использование для этого протоколов (интерфейсов).

Затем я могу использовать Swinject или Resolver для создания объектов. Но если цель приложения состоит в том, чтобы иметь вкусные, слабо разделенные объекты, что-то не так с использованием init () с аргументами по умолчанию.

final class MyViewModel: ObservableObject {
    
    // MARK: - Repositories
    private let repo: IMyRepository
    
    // MARK: - Init
    init(repo: IMyRepository = MyRepository()) {
        self.repo = repo
    }
}

Если я не использую фреймворки Swinject или Resolver или другой ручной контейнер зависимостей и используйте такую ​​модель представления, которая имеет инъекцию в конструктор с использованием протокола и аргументов по умолчанию. Кажется, я легко могу создать MockMyRepository и вставить его сюда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...