Ответ
Имею опыт написания Unit-тестов (XCTest) для бизнес-логики и UI-тестов (XCUITest) для проверки пользовательских сценариев.
1. Unit-тесты (логика, ViewModel, сервисы):
- Мокирование зависимостей через протоколы для изоляции тестируемого модуля.
- Проверка состояний и побочных эффектов.
// Протокол для зависимости
protocol DataServiceProtocol {
func fetchItems() -> [String]
}
// Мок для тестов
class MockDataService: DataServiceProtocol {
var itemsToReturn: [String] = []
func fetchItems() -> [String] { return itemsToReturn }
}
// Сам тест
class ViewModelTests: XCTestCase {
func testViewModelLoadsItemsCorrectly() {
// Arrange
let mockService = MockDataService()
mockService.itemsToReturn = ["Item1", "Item2"]
let viewModel = MyViewModel(service: mockService)
// Act
viewModel.loadData()
// Assert
XCTAssertEqual(viewModel.displayedItems.count, 2)
XCTAssertEqual(viewModel.displayedItems.first, "Item1")
}
}
2. UI-тесты (XCUITest):
- Использование accessibility identifiers для надежного поиска элементов.
- Воспроизведение действий пользователя (
tap(),swipe(),typeText()). - Проверка навигации и состояния UI (
waitForExistence,exists).