Модульные тесты - Swift 3.2
Я должен написать пример модульного теста, чтобы проверить, вызывается ли конкретный метод из метода, вызываемого из примера модульного теста.
class A{
func fetchPersonsData() {
let b = B()
b.sendDataToserver([])
}
}
class B {
func sendEventToServer(_:[]) {
}
}
В моем тестовом случае я позвоню fetchPersonsData()
метод и хотите проверить, вызывает ли он sentEventToServer(_:)
или нет и каковы параметры.
Как написать тестовый пример для этого в Swift 3.2?
Должен ли я издеваться, создав подкласс класса B, переопределить требуемый метод и пройти тест, если требуемый метод вызывается?
1 ответ
Решение
Сначала добавьте протокол:
protocol ServerSender {
func sendEventToServer(_:[String])
}
Делать B
соответствовать этому протоколу:
class B: ServerSender {
func sendEventToServer(_:[String]) {
}
}
В вашей тестовой цели добавьте макет:
class BMock: ServerSender {
var sendDataToServerCalled = false
func sendEventToServer() {
sendDataToServerCalled = true
}
}
+ Изменить A
чтобы разрешить внедрение зависимости:
class A {
lazy var b: ServerSender = B()
func fetchPersonsData() {
b.sendDataToServer([])
}
}
В своем тесте вставьте макет:
func test_fetchPersonsData_sendsDataToServer() {
let sut = A()
let mock = BMock()
sut.b = mock
a.fetchPersonsData()
XCTAssertTrue(mock.sendDataToServerCalled)
}