Flutter 颤振-如何正确地对FutureBuilder进行单元测试
我试图在Flutter 颤振-如何正确地对FutureBuilder进行单元测试,flutter,asynchronous,flutter-test,flutter-futurebuilder,flutter-future,Flutter,Asynchronous,Flutter Test,Flutter Futurebuilder,Flutter Future,我试图在FutureBuilder中对小部件进行单元测试,但我想不通 我有一个小部件,它有一个FutureBuilder,当连接状态完成时,它会返回一个CameraPreview小部件: body: FutureBuilder<void>( future: _initializeControllerFuture, builder: (context, snapshot) { if (snapshot.connectionState ==
FutureBuilder
中对小部件进行单元测试,但我想不通
我有一个小部件,它有一个FutureBuilder
,当连接状态完成时,它会返回一个CameraPreview
小部件:
body: FutureBuilder<void>(
future: _initializeControllerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
// If the Future is complete, display the preview.
return CameraPreview(_controller);
} else {
// Otherwise, display a loading indicator.
return const Center(child: CircularProgressIndicator());
}
},
),
我已经对它进行了调试,snapshot.connectionState
从未完成(总是等待),因此它跳过了返回CameraPreview
的行。我也尝试了tester.pumpandsolite()
,但它超时了
有什么想法吗?是不是因为“
connectionState
从未完成”实际上处于错误状态?不确定摄像头插件在测试过程中的行为……我调试它时,它总是处于等待状态,您可以共享\u initializeControllerFuture
的代码吗?也许这在单元测试期间永远不会回来,那么(?)当然,我已经把它添加到我的帖子中了。是的,这就是我的想法,它永远不会返回,但我不太确定如何在单元测试中模拟它。我明白了。那么,在父类中创建一个用@visibleForTesting注释的构造函数,它可以模拟CameraController
?这样,您就可以重写.initialize()
方法并确保它返回。。。
Future<void> _initializeControllerFuture;
@override
void initState() {
super.initState();
// To display the current output from the Camera,
// create a CameraController.
_controller = CameraController(
// Get a specific camera from the list of available cameras.
widget.camera,
// Define the resolution to use.
ResolutionPreset.medium,
);
// Next, initialize the controller. This returns a Future.
_initializeControllerFuture = _controller.initialize();
}
testWidgets('Camera preview is available',
(WidgetTester tester) async {
await _buildCameraScreenPage(tester);
await tester.pump();
expect(find.byType(CameraPreview), findsOneWidget,
reason: 'Camera preview should be visible.');
});