我正在尝试对我的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?如果是我该怎么办?