2

全部,

这是一个用于检查集合大小的单元测试

main() {
  test("Resource Manager Image Load", () {
    ResourceManager rm = new ResourceManager();
    int WRONG_SIZE = 1000000;

    rm.loadImageManifest("data/rm/test_images.yaml").then((_){
      print("Length="+ rm.images.length.toString()); // PRINTS '6' - WHICH IS CORRECT
      expect(rm.images, hasLength(WRONG_SIZE));
    });
  });
}

我从浏览器运行它(正在使用客户端 Dart 库)并且它总是通过,无论 WRONG_SIZE 的值是多少。

帮助表示赞赏。

4

2 回答 2

2

在这种简单的情况下,您可以返回未来。单元测试框架识别它并等待未来完成。这也适用于setUp/ tearDown

main() {
  test("Resource Manager Image Load", () {
    ResourceManager rm = new ResourceManager();
    int WRONG_SIZE = 1000000;

    return rm.loadImageManifest("data/rm/test_images.yaml").then((_) {
    //^^^^
      print("Length="+ rm.images.length.toString()); // PRINTS '6' - WHICH IS CORRECT
      expect(rm.images, hasLength(WRONG_SIZE));
    });
  });
}
于 2014-09-29T06:15:40.743 回答
1

问题是您的代码返回 a Future,并且您的测试在 Future 中的代码完成之前完成,因此没有什么会导致它失败。

查看Dart 网站上的异步测试部分。有类似的方法expectAsync允许将未来传递给测试框架,以便它可以等待它们完成并正确处理结果。

这是一个示例(请注意,expect调用现在在传递给的函数内expectAsync

test('callback is executed once', () {
  // wrap the callback of an asynchronous call with [expectAsync] if
  // the callback takes 0 arguments...
  var timer = Timer.run(expectAsync(() {
    int x = 2 + 3;
    expect(x, equals(5));
  }));
});
于 2014-09-29T06:01:10.063 回答