У вас есть несколько вариантов:
Сто NetworkingProvider
Создать свой сервис с помощью пользовательского NetworkingProvider
реализации.
// App
var myAppNetworkingProvider: NetworkingProviderConvertible =
URLSessionConfiguration.ephemeral // Siesta default
...
Service(baseURL: "...", networking: myAppNetworkingProvider)
// Tests
myAppNetworkingProvider = NetworkStub()
Ваш StubbedNetworkingProvider
может возвращать один жестко или матч на URLRequest
, если вы хотите окурок несколько ответов на один раз.
Это лучший вариант для большинства приложений. Вы можете увидеть его пример в Siesta’s own performance tests. Это просто, быстро и дает мелкозернистый контроль, но все же позволяет вам протестировать с реалистичным поведением Siesta.
тупиковой сети
Siesta работает с сетевыми гася библиотек как OHHTTPStubs, Mockingjay и Nocilla. (Siesta сама использует Nocilla для собственных внутренних регрессионных тестов, хотя библиотека имеет внутренние условия гонки и не особенно хорошо поддерживается на момент написания этой статьи, поэтому я не могу ее полностью рекомендовать).
Съемка самой сети имеет преимущество тестирования полного взаимодействия вашего приложения с базовым сетевым API. Этот подход может быть лучше всего для полнофункциональных тестов интеграции, особенно если вы хотите записывать и воспроизводить ответы от реального API.
Протокол пользовательских ресурсов
Поскольку Swift поддерживает retroactive modeling, Resource
не должны быть (или реализация) проверяемый протокол. Вы можете создать собственное:
protocol ResourceProtocol {
// Resource methods your app uses
}
// No new methods; just adding conformance
extension Resource: ResourceProtocol { }
Это похоже на то, что вы ищете в своем оригинальном вопросе. Тем не менее, я не особо рекомендую:
- Это самый сложный в реализации - и наиболее подверженный ошибкам. Вы удивительно трудно точно имитировать все поведение Сиесты. Поверьте мне: API ресурсов кажется сначала невиновным, но вы обнаружите, что переопределите половину библиотеки, если попытаетесь реализовать все это приложение таким образом.
- Вероятно, упустите проблемы и не поймайте регрессии.Многие из опасных мест, использующих Siesta, связаны с точной последовательностью вызовов: какие события происходят и в каком порядке, что происходит сразу же после следующего поворота основного цикла запуска, какие отношения наблюдателя/владельца делают или не делают создавать циклы сохранения и т. д. Вам придется делать предположения обо всех этих вещах, и вы в конечном итоге будете тестировать свой код против своих предположений, а не против реального поведения библиотеки.
Короче говоря, по сравнению с другими подходами это более высокое усилие для более низкого значения. Это, конечно, не эффективный способ проведения регрессионного тестирования.
При этом, если вы придерживаетесь философии модульного тестирования пуриста «не тестируйте границы», то это способ сделать это.