Модульные тесты - 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)
}
Другие вопросы по тегам