如何使用Dart中的Future测试方法?

时间:2014-09-14 16:27:25

标签: dart dart-async dart-unittest

我想测试一个在另一台服务器上执行POST的方法:

Future executePost() {
  _client.post("http://localhost/path", body : '${data}').then((response) {
    _logger.info("Response status : ${response.statusCode}");
    _logger.info("Response body : ${response.body}");

    Completer completer = new Completer();
    completer.complete(true);
    return completer.future;
  }).catchError((error, stackTrace) {
    _logger.info(error);
    _logger.info(stackTrace);
  });
}

我正在处理的问题是我的测试方法在未来由" _client.post"返回之前结束。被执行。

我的测试方法:

test('should be true', () {
  try {
    Future ok = new MyClient().executePost();
    expect(ok, completion(equals(true)));
  } catch(e, s) {
    _logger.severe(e);
    _logger.severe(s);
  }
});

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您的executePost()方法甚至没有返回未来,它会返回null client.post()返回未来但不使用此返回值。

尝试将其更改为:

Future executePost() {
  return _client.post("http://localhost/path", body : '${data}').then((response) {
    _logger.info("Response status : ${response.statusCode}");
    _logger.info("Response body : ${response.body}");
    return true;
  }).catchError((error, stackTrace) {
    _logger.info(error);
    _logger.info(stackTrace);
  });
}