1

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

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

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

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

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

如果需要的方法被调用,我应该通过创建 B 类的子类并覆盖所需的方法并通过我的测试来模拟吗?

4

1 回答 1

2

首先添加一个协议:

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)
}
于 2018-08-11T18:42:47.890 回答