簡體   English   中英

XCTest期望使用swift進行方法調用

[英]XCTest expect method call with swift

如何編寫一個使用swift和XCTest進行方法調用的測試?

我可以使用OCMock,但他們並沒有正式支持swift,所以沒有多少選擇。

正如你所說,OCMock不支持Swift(也不支持OCMockito),所以現在我看到的唯一方法是創建一個手動模擬。 在swift中,由於您可以在方法中創建內部類,但是這樣做會有點痛苦,但仍然不像模擬框架那樣方便。

這里有一個例子。 代碼是自解釋的,我必須做的唯一事情(參見下面的編輯1)使其工作是將我想要在測試中使用的類和方法聲明為public(似乎測試類不屬於相同的應用程序的代碼模塊 - 將嘗試找到一個解決方案)。

編輯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() {

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM