我正在创建一个抖动应用程序,它使用官方的抖动照相机包(https://pub.dev/packages/camera)使用本机相机拍摄照片。该应用程序将打开一个模态,该模态将根据来自包装的CameraPreview
函数的结果加载一个availableCameras
和一个FloatingActionButton
,当按下时会拍照。在为此模式创建窗口小部件测试时,我无法弄清楚如何对availableCameras
函数进行存根以返回测试期间想要的内容。
我尝试使用Mockito测试包,但这仅支持模拟类。由于此函数不属于类,因此无法对其进行模拟。
availableCameras
函数返回设备所拥有的摄像机列表。我希望能够控制此功能返回的结果,以便测试我的小部件对不同相机的反应。使此函数在小部件测试期间返回我想要的东西的正确方法是什么?
答案 0 :(得分:1)
Mockito也可以模拟函数。在dart中,函数是带有call
方法的类。
因此,您可以照常使用Mockito和抽象的call
方法:
class MockFunction extends Mock {
int call(String param);
}
此示例表示一个int Function(String param)
。
这意味着您可以执行以下操作:
final int Function(String) myFn = MockFunction();
when(myFn('hello world')).thenReturn(42);
expect(myFn('hello world'), equals(42));
答案 1 :(得分:0)
在这种非常特殊的情况下,您可以mock the method channel call handler。
setUpAll(() {
const MethodChannel('plugins.flutter.io/camera')
.setMockMethodCallHandler(cameraCallHandler);
});
Future<dynamic> cameraCallHandler(MethodCall methodCall) async {
if (methodCall.method == 'availableCameras') return yourListOfCameras;
}