Интеграционное тестирование с использованием тестирования асинк-аваита и быстрогоIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Интеграционное тестирование с использованием тестирования асинк-аваита и быстрого

Сообщение Anonymous »

У меня есть простой класс обертки UrlSession для задач данных, которые так: < /p>
enum ApiHeaderAuth {
case basic(username: String, password: String)
case bearer(token: String)

var rawValue: String {
switch self {
case .basic(username: let username, password: let password):
guard let credentialData = "\(username):\(password)".data(using: .utf8) else {
return ""
}

let base64Credentials = credentialData.base64EncodedString()
return "Basic \(base64Credentials)"
case .bearer(let value):
return "Bearer \(value)"
}
}
}

typealias ApiResult = (Data, URLResponse)

protocol ApiClientable {
func get(path: String?, parameters: [String: Any]?, headers: [String: String]?, auth: ApiAuthHeader) async throws -> ApiResult
func post(_ data: Data, path: String?, parameters: [String: Any]?, headers: [String: String]?, auth: ApiAuthHeader) async throws -> ApiResult
func put(_ data: Data, path: String?, parameters: [String: Any]?, headers: [String: String]?, auth: ApiAuthHeader) async throws -> ApiResult
func patch(_ data: Data, path: String?, parameters: [String: Any]?, headers: [String: String]?, auth: ApiAuthHeader) async throws -> ApiResult
func delete(path: String?, parameters: [String: Any]?, headers: [String: String]?, auth: ApiAuthHeader) async throws -> ApiResult
}

class ApiClient: ApiClientable {
private let session: URLSession
private let hostString: String

init(sessionProvider: @escaping () -> URLSession = { URLSession.shared }, hostProvider: @escaping () -> String) {
self.session = sessionProvider()
self.hostString = hostProvider()
}

func get(path: String?, parameters: [String: Any]?, headers: [String: String]?, auth: ApiAuthHeader) async throws -> ApiResult {
let queries = parameters?.reduce("?") {
"\($0)\($1.key)=\($1.value)&"
}.dropLast()
if let url = URL(string: "\(hostString)\(path ?? "")\(queries ?? "")") {
let request = URLRequest(url: url)
request.httpMethod = HTTPMethod.get.rawValue
request.allHTTPHeaderFields = headers.merging(["Authorization": auth.rawValue], uniquingKeysWith: { (_, new) in new })
return try await session.data(for: request)
} else {
throw(ApiClientError.invalidURL)
}
}

}
< /code>
У меня есть комплекс интеграционных тестов с использованием Swift Testing, который будет проверять это на реальном URL -адресе для тестирования. Как так: < /p>
struct ApiClientIntegrationTests {

@Test func get() async throws {
let host = "https://developer.apple.com"

let sut = ApiClient(hostProvider: { host })

await #expect(throws: Never.self) {
let (data, response) = try await sut.get(path: "/documentation/testing", parameters: nil, headers: [:])
print(String(data: data, encoding: .utf8) ?? "No data")
#expect(data.count > 0)
#expect(response is HTTPURLResponse)
}
}

}
< /code>
Теперь тест всегда зеленый, потому что ожидаемая задача данных еще не выполнена, но тест был завершен. Как мне дождаться завершения данных? Я знаю, как это сделать, - это xctest, используя ожидание, ожидая его в основном органе теста и выполняет его, когда задача данных возвращает значение. Но как это сделать в Swift Testing? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ft-testing
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как выполнить интеграционное тестирование с Quartz в Xunit
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Как выполнить интеграционное тестирование с Quartz в Xunit
    Anonymous » » в форуме C#
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • .NET — интеграционное тестирование с промежуточным программным обеспечением (PACT)
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Интеграционное тестирование ASP.NET Core IPasswordHasher.HashPassword генерирует разные хэши
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Интеграционное тестирование ASP.NET Core IPasswordHasher.HashPassword генерирует разные хэши
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»