Swift AVCaptureDeviceInput自定义初始化程序始终返回nil

时间:2019-12-17 09:40:25

标签: ios swift mocking

我正在尝试对我的App的视频录制功能进行单元测试。我正在使用AVFoundation录制视频。

为了对某些主要功能进行单元测试,我编写了一些协议和模拟类。

首先,我为AVCaptureDevice编写了一个协议

 data: () => ({
    files: "",
  })

,然后使AVCaptureDevice符合我的public protocol CaptureDeviceManager { var position: AVCaptureDevice.Position { get } var focusMode: AVCaptureDevice.FocusMode { get set } func lockForConfiguration() throws func unlockForConfiguration() func setFocusMode(_ focusMode: AVCaptureDevice.FocusMode) } 协议,如下所示。

CaptureDeviceManager

然后,我向AVCaptureDeviceInput类添加了一个便利的初始化,以将CaptureDeviceManager馈送到AVCaptureDeviceInput,如下所示。

extension AVCaptureDevice: CaptureDeviceManager {
    public func setFocusMode(_ focusMode: AVCaptureDevice.FocusMode) {
        self.focusMode = focusMode
    }
}

问题在于,每当我将extension AVCaptureDeviceInput { convenience init?(device: CaptureDeviceManager) throws { guard let downcast = device as? AVCaptureDevice else { return nil } try self.init(device: downcast) } } 输入到我编写的AVCaptureDeviceInput的便捷初始化中时,由于device: CaptureDeviceManager部分始终为nil,它总是返回nil。

是否有可能将CaptureDeviceManager转换为AVCaptureDevice?如果是我该怎么办?

0 个答案:

没有答案
相关问题