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)更容易?
有一种简单的方法可以运行以这种方式编写的所有单元测试并查看结果吗?
答案 0 :(得分:13)
Dart的单元测试仍处于开发阶段。我们(Dart作者)目前使用python脚本(tools / test.py)来执行我们所有的测试。该脚本运行预定义的目录,查找以“Test”结尾的文件,执行它们,并将它们与预期结果进行比较。
几天前,提交了第一个版本的test.dart(Dart中的等效版本)。在不久的将来,我们将从tools / test.py切换到tools / test.dart来执行我们所有的测试。
如果您正在编写一个大项目,则可以重用我们的测试框架。我们每天都在使用它,它非常稳定。对于较小的项目,花在学习框架上的时间可能不值得。如果有(或将来)其他测试框架,我也不会感到惊讶。
您的问题中的ListTest很早就已经写好了,当时顶级功能还没有。它已被修改(添加主函数)但我们不再以这种方式编写测试。除非需要,否则我们不会在测试用例中创建类。例如,请参阅here进行更新的测试。
编辑:在client / testing / unittest /中还有一个单元测试框架。有关使用此框架的测试,请参阅here。这个还有一个优点,就是它可以在浏览器中运行。
答案 1 :(得分:7)
dartlang.org有一篇关于current state of unit testing in dart的文章很长。可以找到API文档here。
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;
}
答案 2 :(得分:5)
This post(通过G +)给出了对飞镖单元测试当前状态的非常详细的描述,并提供了单元测试的浏览器内视图的精彩截图。
答案 3 :(得分:2)
使用测试 Dart包https://pub.dartlang.org/packages/test
此软件包之前已命名为unittest,现已弃用,但您可能会遇到有关它的旧文章。应该为“测试”包编写新的测试。
测试可以手动运行(与任何其他Dart程序一样),也可以使用pub
(可以运行单个测试或在目录下找到的多个测试)。
答案 4 :(得分:1)
YouTube上有一种方法DartUnit:TDD for FizzBuzz in Dart
代码位于GitHub。
答案 5 :(得分:1)
关于Dart TDD的博客: http://tdd-dart.blogspot.com/