gpt4 book ai didi

unit-testing - 我应该如何在 Dart 中测试 Future?

转载 作者:行者123 更新时间:2023-12-03 11:34:54 25 4
gpt4 key购买 nike

如何测试返回 Future 的方法在测试运行器完成之前?我有一个问题,我的单元测试运行程序在异步方法完成之前完成。

最佳答案

如何使用 completion 进行测试的完整示例匹配器如下。

import 'package:unittest/unittest.dart';

class Compute {
Future<Map> sumIt(List<int> data) {
Completer completer = new Completer();
int sum = 0;
data.forEach((i) => sum += i);
completer.complete({"value" : sum});
return completer.future;
}
}

void main() {
test("testing a future", () {
Compute compute = new Compute();
Future<Map> future = compute.sumIt([1, 2, 3]);
expect(future, completion(equals({"value" : 6})));
});
}

在此代码完成之前,单元测试运行程序可能无法完成。因此,单元测试似乎正确执行。与 Future可能需要更长时间才能完成正确方法的 s 是利用 completion匹配器在 unittest 包中可用。

/**
* Matches a [Future] that completes succesfully with a value that matches
* [matcher]. Note that this creates an asynchronous expectation. The call to
* `expect()` that includes this will return immediately and execution will
* continue. Later, when the future completes, the actual expectation will run.
*
* To test that a Future completes with an exception, you can use [throws] and
* [throwsA].
*/
Matcher completion(matcher) => new _Completes(wrapMatcher(matcher));

人们可能会尝试执行以下操作,这将是在 dart 中对返回的 Future 进行单元测试的不正确方式。警告:下面是测试 future 的不正确方法。

import 'package:unittest/unittest.dart';

class Compute {
Future<Map> sumIt(List<int> data) {
Completer completer = new Completer();
int sum = 0;
data.forEach((i) => sum+=i);
completer.complete({"value":sum});
return completer.future;
}
}

void main() {
test("testing a future", () {
Compute compute = new Compute();
compute.sumIt([1, 2, 3]).then((Map m) {
Expect.equals(true, m.containsKey("value"));
Expect.equals(6, m["value"]);
});
});
}

关于unit-testing - 我应该如何在 Dart 中测试 Future?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13678993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com