[英]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.