Каков наилучший способ написания модульных тестов в 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?
Есть ли простой способ запускать все блок-тесты, написанные таким образом, и увидеть результаты?
Ответы
Ответ 1
Единичное тестирование в Dart все еще находится в стадии разработки. Мы (авторы Дарта) в настоящее время используем python script (tools/test.py) для выполнения всех наших тестов. script проходит через предопределенные каталоги, ищет файлы, заканчивающиеся на "Test", выполняет их и сравнивает их с ожидаемым результатом.
Несколько дней назад была отправлена первая версия test.dart(эквивалент в Dart). В ближайшее время мы переключимся с tools/test.py на tools/test.dart, чтобы выполнить все наши тесты.
Если вы пишете большой проект, вы можете повторно использовать нашу тестовую структуру. Мы используем его ежедневно, и он довольно стабилен. Для небольших проектов время, затрачиваемое на изучение структуры, может не стоить усилий. Я бы также не удивился, если будут (или будут) другие тестовые рамки.
ListTest из вашего вопроса был написан очень рано, когда функции верхнего уровня еще не были доступны. С тех пор он был изменен (добавив главную функцию), но мы больше не будем писать тест таким образом. Если это не требуется, мы не создаем классы в наших тестовых случаях. См., Например, здесь для более позднего теста.
Изменить: В клиенте/тестировании/unittest/существует также единичная тестовая среда. См. здесь для тестирования с использованием этой структуры. Это также имеет то преимущество, что он работает в браузере.
Ответ 2
dartlang.org содержит очень длинную статью о текущем состоянии модульное тестирование в дротике. Документацию 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;
}
Ответ 3
This post от "Adam Coding" (через G +) дает очень подробное описание текущего состояния дротика модульное тестирование, с хорошими снимками экрана в окне просмотра в вашем браузере.
Ответ 4
Используйте пакет test Dart https://pub.dartlang.org/packages/test
Этот пакет ранее был назван unittest, который теперь устарел, но вы можете столкнуться с его старыми статьями. Новые тесты должны быть написаны для пакета "test".
Тесты можно запускать вручную (как и любая другая программа Dart) или использовать с помощью pub
(который может запускать отдельные тесты или несколько тестов, найденных в каталоге).
Ответ 5
Вот пример одного подхода, DartUnit, на YouTube: TDD для FizzBuzz в Dart
Код GitHub.
Ответ 6
Блог о TDD в Дарте:
http://tdd-dart.blogspot.com/