17

Dart 似乎还没有专门的单元测试框架。编写和运行单元测试的最佳方法是什么?

Dart 源代码中有一些非常低级的示例(例如 \tests\corelib\src\ListTest.dart),如下所示:

class ListTest {

  static testMain() {
    testList();
    testExpandableList();
  }

  static void testList() { ... }
  static void testExpandableList() { ... }
}

main() {
  ListTest.testMain();
}

这是在 Dart 中编写测试的推荐方法,还是使用某些单元测试库(如 x-unit)使其更容易?

有没有一种简单的方法可以运行以这种方式编写的所有单元测试并查看结果?

4

6 回答 6

13

Dart 中的单元测试仍处于开发阶段。我们(Dart 作者)目前使用 python 脚本(tools/test.py)来执行我们所有的测试。该脚本通过预定义的目录运行,查找以“Test”结尾的文件,执行它们,并将它们与预期结果进行比较。

几天前,已经提交了 test.dart 的第一个版本(Dart 中的等价物)。在不久的将来,我们将从 tools/test.py 切换到 tools/test.dart 来执行我们所有的测试。

如果您正在编写一个大项目,您可以重用我们的测试框架。我们每天都在使用它,它非常稳定。对于较小的项目,花在学习框架上的时间可能不值得。如果有(或将会有)其他测试框架,我也不会感到惊讶。

您问题中的 ListTest 很早就编写了,当时还没有顶级功能。它已经被修改(添加了 main 函数),但我们不会再用这种方式编写测试了。除非需要,否则我们不会在测试用例中创建类。例如,请参阅此处以获取更新的测试。

编辑:在 client/testing/unittest/ 中还有一个单元测试框架。有关使用此框架的测试,请参见此处。这个还具有在浏览器中运行的优点。

于 2011-12-08T21:11:07.603 回答
7

dartlang.org有一篇很长的文章,介绍了dart 中单元测试的当前状态。API 文档可以在这里找到。

import 'package:unittest/unittest.dart';

void main() {
  test('QuickSort', () =>
    expect(QuickSort([5, 4, 3, 2, 1]),
      orderedEquals([1, 2, 3, 4, 5]))
  );
}

int _Partition(List array, int left, int right, int pivotIndex) {
  var pivotValue = array[pivotIndex];
  array[pivotIndex] = array[right];
  array[right] = pivotValue;
  var storeIndex = left;
  for (var i = left; i < right; i++) {
    if (array[i] < pivotValue) {
      var tmp = array[i];
      array[i] = array[storeIndex];
      array[storeIndex] = tmp;
    }
  }
  var tmp = array[storeIndex];
  array[storeIndex] = array[right];
  array[right] = tmp;
  return storeIndex;
}

void _QuickSort(List array, int left, int right) {
  if (left < right) {
    int pivotIndex = left + ((right-left) / 2);
    pivotIndex = _Partition(array, left, right, pivotIndex);
    _QuickSort(array, left, pivotIndex-1);
    _QuickSort(array, pivotIndex+1, right);
  }
}

List QuickSort(List array) {
  _QuickSort(array, 0, array.length-1);
  return array;
}
于 2012-06-28T21:38:47.393 回答
5

这篇来自“Adam Coding”(通过 G+)的帖子非常详细地描述了 dart 单元测试的当前状态,并提供了单元测试的 In-Browser 视图的漂亮屏幕截图。

于 2011-12-20T08:19:20.763 回答
4

使用测试Dart 包https://pub.dartlang.org/packages/test

这个包以前被命名为unittest现在已被弃用,但你可能会遇到关于它的旧文章。应该为“test”包编写新的测试。

测试可以手动运行(像任何其他 Dart 程序一样),或者使用 by pub(可以运行单个测试或在一个目录下找到的多个测试)。

于 2016-01-11T04:11:24.363 回答
1

YouTube 上有一种方法的示例 DartUnit:Dart 中 FizzBu​​zz 的 TDD

代码在GitHub 上

于 2011-12-20T15:48:22.627 回答
1

Dart 中关于 TDD 的博客:http: //tdd-dart.blogspot.com/

于 2012-02-05T20:57:33.900 回答