繁体   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