Модульный тест
Во-первых, что такое «модульный тест»? Это процесс проверки небольших фрагментов кода для обеспечения его целостности. Проверим пользовательские модели: struct, class, protocol и т. д.
Предпочитаю создавать отдельный class, делая из XCTestCase подкласс, соответствующий каждой тестируемой модели.
Тестирование моделей декодирования
Начнем с тестирования моделей декодирования Repository и Response. Упрощаем тестирование: в цель testsDemoTests добавляем SampleData. Это json-файлы с примерами ответов. Возьмите их на странице GitHub или создайте свои.
Тестируем Repository:
/
// RepositoryTests.swift
// testsDemoTests
//
// Создано Itsuki 17.10.2023.
//
import XCTest
// 1
@testable import testsDemo
final class RepositoryTests: XCTestCase {
// 2
var sut: Repository!
override func setUpWithError() throws {
try super.setUpWithError()
// 3: инициализируем экземпляр
// sut = YourTestInstance()
}
override func tearDownWithError() throws {
try super.tearDownWithError()
// 5: очистка
sut = nil
}
// 4
func testRepositoryDecoding() throws {
let path = Bundle(for: ResponseTest.self).path(forResource: "sampleRepository", ofType: "json")!
let data = NSData(contentsOfFile: path)! as Data
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
sut = try! decoder.decode(Repository.self, from: data)
XCTAssertEqual(sut.id, 44838949)
XCTAssertEqual(sut.fullName, "apple/swift")
XCTAssertEqual(sut.stargazersCount, 61951)
XCTAssertEqual(sut.language, "C++")
}
}Присмотримся, что здесь происходит:
📌Продолжение
📌Часть 1