Как написать тест, ожидающий вызова метода, используя swift и XCTest?
Я мог бы использовать OCMock, но они официально не поддерживают Swift, так что это не лучший вариант.
Как написать тест, ожидающий вызова метода, используя swift и XCTest?
Я мог бы использовать OCMock, но они официально не поддерживают Swift, так что это не лучший вариант.
Как вы сказали, OCMock не поддерживает Swift (ни OCMockito), поэтому на данный момент единственный способ, который я вижу, - это создать ручной макет. В Swift это немного менее болезненно, так как вы можете создавать внутренние классы внутри метода, но все же не так удобно, как mocking framework.
Вот вам пример. Код не требует пояснений, единственное, что мне нужно было сделать (см. РЕДАКТИРОВАТЬ 1 ниже), чтобы заставить его работать, - это объявить классы и методы, которые я хочу использовать в тесте, как общедоступные (кажется, что тестовые классы не принадлежат тот же модуль кода приложения - постараюсь найти решение этой проблемы).
РЕДАКТИРОВАТЬ 1 2016/4/27: Объявление классов, которые вы хотите протестировать, как общедоступных, больше не требуется, поскольку вы можете использовать функцию «@testable import ModuleName».
Тест:
import XCTest
import SwiftMockingPoC
class MyClassTests: XCTestCase {
func test__myMethod() {
// prepare
class MyServiceMock : MyService {
var doSomethingWasCalled = false
override func doSomething(){
doSomethingWasCalled = true
}
}
let myServiceMock = MyServiceMock()
let sut = MyClass(myService: myServiceMock)
// test
sut.myMethod()
// verify
XCTAssertTrue(myServiceMock.doSomethingWasCalled)
}
}
MyClass.swift
public class MyClass {
let myService: MyService
public init(myService: MyService) {
self.myService = myService
}
public func myMethod() {
myService.doSomething()
}
}
MyService.swift
public class MyService {
public init() {
}
public func doSomething() {
}
}