我必须编写单元测试用例,以检查是否从单元测试用例中调用的方法中调用特定方法。
class A{
func fetchPersonsData() {
let b = B()
b.sendDataToserver([])
}
}
class B {
func sendEventToServer(_:[]) {
}
}
在单元测试用例中,我将调用fetchPersonsData()
方法,并希望检查它是否调用sentEventToServer(_:)
以及参数是什么。
如何在Swift 3.2中为此编写测试用例?
我是否应该通过创建类B的子类并覆盖必需的方法并通过调用我的测试(如果需要的方法被调用)来进行模拟?
答案 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)
}