解决方法
正如你所说,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)
- }
- }
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() {
- }
- }