dkl*_*dkl 16 unit-testing dart
Dart似乎还没有专门的单元测试框架.编写和运行单元测试的最佳方法是什么?
Dart源代码中有一些非常低级的示例(例如\ tests\corelib\src\ListTest.dart),如下所示:
class ListTest {
static testMain() {
testList();
testExpandableList();
}
static void testList() { ... }
static void testExpandableList() { ... }
}
main() {
ListTest.testMain();
}
Run Code Online (Sandbox Code Playgroud)
这是在Dart中编写测试的推荐方法,还是有任何努力使一些单元测试库(如x-unit)更容易?
有一种简单的方法可以运行以这种方式编写的所有单元测试并查看结果吗?
Flo*_*sch 13
Dart的单元测试仍处于开发阶段.我们(Dart作者)目前使用python脚本(tools/test.py)来执行我们所有的测试.该脚本运行预定义目录,查找以"Test"结尾的文件,执行它们,并将它们与预期结果进行比较.
几天前,我们已经提交了第一个版本的test.dart(相当于Dart).在不久的将来,我们将从tools/test.py切换到tools/test.dart以执行所有测试.
如果您正在编写一个大项目,则可以重用我们的测试框架.我们每天都在使用它,它非常稳定.对于较小的项目,花在学习框架上的时间可能不值得.如果有(或将来)其他测试框架,我不会感到惊讶.
你的问题中的ListTest很早就写好了,当时顶级函数还没有.它已被修改(添加主函数),但我们不再以这种方式编写测试.除非需要,否则我们不会在测试用例中创建类.例如,请参阅此处了解更新的测试.
编辑:在client/testing/unittest /中还有一个单元测试框架.请参阅此处以了解使用此框架的测试.这个还具有在浏览器中运行的优点.
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;
}
Run Code Online (Sandbox Code Playgroud)