单元测试用例-Swift 3.2

时间:2018-08-09 23:35:09

标签: ios unit-testing mocking xctest swift3.2

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

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

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

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

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

我是否应该通过创建类B的子类并覆盖必需的方法并通过调用我的测试(如果需要的方法被调用)来进行模拟?

1 个答案:

答案 0 :(得分: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)
}