我正在try 对一个类及其方法进行单元测试.方法通过forLoop中的工厂生成器方法生成对象列表.

  1. 单元测试我发现的方法通过返回堆栈溢出 destruct 了我的测试环境

  2. 如果我删除forloop,单元测试就会成功,没有任何问题

是什么导致了这一断裂?


  final ClassA sut = ClassA();

// The suspect

  void badMethod(
    int arg1,
    int arg2,
    int arg3,
    List<ClassA> ls,
  ) {
    for (int i = arg1; i <= arg2; i + arg3) {

      /// Below is a factory generator method from the Parent class, 
      /// being used in this subclass

      ClassA t = ClassA.generate(type: 'test', trigger: i);
      ls.add(t);
    }
    return;
  }

// ----Test below

  group('info', () {

// No problems here

    test('test', () {
      final List<ClassA> r = [];

      ClassA t = ClassA.generate(type: 'test', trigger: i);
      r.add(t);

      expect(r, []);
    });

//! stackoverflow here

    test('adds object to list', () {
      final List<Tile> r = [];

      sut.badMethod(1, 1, 5, r); // <-- bad boy

      expect(r, []);
      expect(r.length, 0);

    });
  });

推荐答案

for (int i = arg1; i <= arg2; i + arg3)

你的意思可能是i += arg3个?否则,您的循环计数器永远不会改变.

祝贺你,你的测试做了它应该做的事情,它发现了一个错误.现在,您只需学习如何调试测试,就可以充分发挥单元测试的威力.

Flutter相关问答推荐

如何防止alert 对话框在收到通知时出现在某个flutter页面中

为什么我需要等待重新访问Firestore数据库,即使它已经做了之前?

在Flutter 动中绘制ECG图

try 在Flutter应用程序中传递变量到FirebaseFirestore Where子句

Flutter -如何停止块监听程序在后台堆栈中运行

Flutter API请求BadState响应

为什么我的页面控制器在使用Riverpod时没有更改我的页面视图?

有没有方法可以从当前时间轻松计算TimeStamp?

使用ImageFilter模糊并剪裁同一renderObject中的元素

当我转到其他屏幕并按下后退按钮时,屏幕将不会刷新

升级到 Flutter 3.10 后,Flutter 键盘填充不起作用. Flutter 3.10 如何防止 BottomSheet 被键盘覆盖?

什么最接近 Dart 的 List.asMap().forEach() 返回列表?

ListView 后台可见

如何格式化网址?

如何从 Flutter Slider Widget 中移除发光效果?

如何从 Firebase `get()` 获取 `DocumentReference`

Flutter - 异步文件读取异常处理

Flutter 本地通知在最新版本中不起作用

Flutter:整个判断整个应用生命周期的通用类

如何在 CircleAvatar 中使用 Stack