使用颤振集成驱动程序在测试代码中捕获异常

Posted

技术标签:

【中文标题】使用颤振集成驱动程序在测试代码中捕获异常【英文标题】:Catch an exception in the test code using flutter integration driver 【发布时间】:2021-07-13 10:47:43 【问题描述】:

我正在使用 Flutter 集成驱动程序来编写 Flutter Web 应用程序的测试用例。页面加载时,系统抛出异常“ImageCodeException: Failed to decode image data”。但是当我执行开发代码本身时,该异常被捕获。

void main()

IntegrationTestWidgetsFlutterBinding.ensureInitialization();

group('Test scenario .....',()
testWidgets('Home',(WidgetTester tester)asynsc

app.main(); // exception throws calling this line
tester.pumpAndSettle();

);

);

尝试/捕捉

void main()
    
    IntegrationTestWidgetsFlutterBinding.ensureInitialization();
    
    group('Test scenario .....',()
    testWidgets('Home',(WidgetTester tester)asynsc
    
try
    app.main(); // exception throws calling this line
catch(Exception)
    tester.pumpAndSettle();
    
    );
    
    );

tester.takeException

void main()
    
    IntegrationTestWidgetsFlutterBinding.ensureInitialization();
    
    group('Test scenario .....',()
    testWidgets('Home',(WidgetTester tester)asynsc
    
tester.takeException()  // or
    app.main(); // exception throws calling this line
tester.takeException()  // or
    tester.pumpAndSettle();
    
    );
    
    );

我尝试了 try/catch , tester.takeException()。但他们没有工作。请问如何在测试代码中捕获异常?

异常详情:widgetTester.Exception被调用,上面的异常将被忽略等等。

【问题讨论】:

【参考方案1】:

你应该重写 FlutterError.onError。下面的示例允许您使用某些消息捕获 FlutterError,可以将其更改为任意异常:

  FlutterError.onError = (FlutterErrorDetails data) 
    if (data.exception is FlutterError) 
      final fErr = data.exception as FlutterError;
      if (fErr.message == '...') 
        // do not forward to presentError
        return;
      
    
    FlutterError.presentError(data);
  ;

【讨论】:

以上是关于使用颤振集成驱动程序在测试代码中捕获异常的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤振/飞镖中捕获平台异常?

小部件库捕获的异常,在颤振中抛出以下断言构建答案**错误**

颤振资产错误:图像资源服务捕获的异常

Promise.catch() 不会在 AngularJS 单元测试中捕获异常

使用try和catch捕获异常

python单元测试中的assertRaises没有捕获异常[重复]