簡體   English   中英

如何為協議擴展內的功能編寫單元測試?

[英]How to write a unit test for a function inside a protocol extension?

目前,我有一個協議:

protocol CameraOpen: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
 func openCamera()
}

該功能在協議擴展中定義:

extension CameraOpen where Self: UIViewController {
 func openCamera() {
        if UIImagePickerController.isSourceTypeAvailable(.camera) {
            let imagePicker = UIImagePickerController()
            imagePicker.delegate = self
            imagePicker.sourceType = .camera
            imagePicker.allowsEditing = false
            self.present(imagePicker, animated: true, completion: nil)
        }
    }
}

這個問題是我不知道如何實際測試協議擴展中定義的功能。 通常,我會創建要測試的類的實例,並使用點表示法來測試該類中的每個函數,但是由於它是協議,因此無法創建它的實例。 例如,如果我做這樣的事情:

class CamerOpenTests: XCTestCase {

    var cameraOpen: CameraOpen?

    override func setUp() {
        super.setUp()
       cameraOpen = CameraOpen()// error here
    }

    override func tearDown() {
    cameraOpen = nil
        super.tearDown()
    }
}

我收到一個錯誤:

無法構造“ CameraOpen”,因為它沒有可訪問的初始化程序

關於如何對該功能進行單元測試的任何想法?

即使您可以將代碼作為擴展添加到協議中,也無法實例化它,這需要使用協議標記的視圖控制器子類。

class CamerOpenTests: XCTestCase {
    class TestCameraOpen : UIViewController, CameraOpen { }

    var cameraOpen: CameraOpen?

    override func setUp() {
        super.setUp()
        cameraOpen = TestCameraOpen()
    }

    override func tearDown() {
        cameraOpen = nil
        super.tearDown()
    }
}

暫無
暫無

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

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