单元测试用例 - Swift 3.2

Unit test cases - Swift 3.2

我必须编写单元测试用例来检查是否从单元测试用例调用的方法中调用特定方法。

class A{
    func fetchPersonsData() {
       let b = B()
       b.sendDataToserver([])
     }
}

class B {
  func sendEventToServer(_:[]) {
  }
}

在我的单元测试用例中,我将调用 fetchPersonsData() 方法并想检查它是否调用 sentEventToServer(_:) 以及参数是什么。

如何在Swift 3.2 中为此编写测试用例?

我是否应该通过创建 class B 的子class 来模拟并覆盖所需的方法并在调用所需的方法时通过我的测试?

先添加协议:

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)
}