如何在 mac mojave 中处理相机测试权限?
How to handle camera permissions for tests in mac mojave?
我有几个遗留单元测试,它们通过处理相机本身的外部模块访问 C++ 中的相机。使用 Mac mojave,相机权限请求打开,单元测试将因超时而失败。我怎样才能自动允许相机访问或完全停用这些权限请求?
请注意,我无法更改实际访问相机的测试代码。它是第三方模块。
编辑:我可能应该将其称为集成测试而不是单元测试
单元测试不应该有任何 I/O 调用,例如文件 I/O、网络 I/O 或任何设备 I/O,例如相机。单元测试应该是快速的,并且应该能够在几秒钟内 运行 数千个测试用例。
解决方案是重构对使用接口访问相机的第三方模块的调用,以便您可以使用模拟实现进行依赖注入并控制调用顺序和 return 值。
您可以创建自己的模拟实现或使用 google mock 之类的框架,通过这些框架您可以轻松获得模拟函数时所需的大量功能。
在“系统偏好设置”→“安全和隐私”→“隐私”下授予相机对 "Terminal" 的访问权限,并始终从终端启动您的测试应用。
我有几个遗留单元测试,它们通过处理相机本身的外部模块访问 C++ 中的相机。使用 Mac mojave,相机权限请求打开,单元测试将因超时而失败。我怎样才能自动允许相机访问或完全停用这些权限请求?
请注意,我无法更改实际访问相机的测试代码。它是第三方模块。
编辑:我可能应该将其称为集成测试而不是单元测试
单元测试不应该有任何 I/O 调用,例如文件 I/O、网络 I/O 或任何设备 I/O,例如相机。单元测试应该是快速的,并且应该能够在几秒钟内 运行 数千个测试用例。
解决方案是重构对使用接口访问相机的第三方模块的调用,以便您可以使用模拟实现进行依赖注入并控制调用顺序和 return 值。
您可以创建自己的模拟实现或使用 google mock 之类的框架,通过这些框架您可以轻松获得模拟函数时所需的大量功能。
在“系统偏好设置”→“安全和隐私”→“隐私”下授予相机对 "Terminal" 的访问权限,并始终从终端启动您的测试应用。