正如您所说,OCMock 不支持 Swift(也不支持 OCMockito),所以目前我看到的唯一方法是创建手动模拟。在 swift 中,这有点不那么痛苦,因为您可以在方法中创建内部类,但仍然不如模拟框架那么方便。
这里有一个例子。代码是不言自明的,我必须做的唯一一件事(参见下面的编辑 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)
}
}
Run Code Online (Sandbox Code Playgroud)
MyClass.swift
public class MyClass {
let myService: MyService
public init(myService: MyService) {
self.myService = myService
}
public func myMethod() {
myService.doSomething()
}
}
Run Code Online (Sandbox Code Playgroud)
MyService.swift
public class MyService {
public init() {
}
public func doSomething() {
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4594 次 |
| 最近记录: |