在小部件测试期间,如何存根不属于类的函数?

Bak*_*amu 4 testing dart flutter flutter-test

我正在创建一个使用原生相机拍照的 Flutter 应用程序,使用官方的 Flutter 相机包(https://pub.dev/packages/camera)。该应用程序打开一个模式,它CameraPreview根据availableCameras包中的函数结果加载 a和 aFloatingActionButton按下时拍照。在为此模式创建小部件测试时,我无法弄清楚如何存根该availableCameras函数以在测试期间返回我想要的内容。

我尝试使用 Mockito 测试包,但这仅支持模拟类。由于这个函数不属于一个类,我不能模拟它。

availableCameras函数返回设备拥有的相机列表。我希望能够控制从这个函数返回的内容,以便我可以测试我的小部件对不同相机的反应。在小部件测试期间让此函数返回我想要的内容的正确方法是什么?

Rém*_*let 8

Mockito 也可以模拟函数。在 dart 中,函数是带有call方法的类。

因此,您可以像往常一样使用 Mockito 和抽象call方法:

class MockFunction extends Mock {
  int call(String param);
}
Run Code Online (Sandbox Code Playgroud)

此示例表示一个int Function(String param).

这意味着您可以执行以下操作:

final int Function(String) myFn = MockFunction();
when(myFn('hello world')).thenReturn(42);

expect(myFn('hello world'), equals(42));
Run Code Online (Sandbox Code Playgroud)