Как написать несколько unittests в дротике в нескольких файлах?
Я пишу какую-то библиотеку Дарта и хочу, чтобы она была unittested. Я создал каталог test
и хочу поставить здесь свои тесты. Поскольку у меня будет много тестов, я хочу, чтобы они были разделены на несколько файлов. Мои вопросы касаются того, что такое конвенция Дарт, как это сделать. Я хочу, чтобы мои тесты легко запускали все, однако я также хочу иметь возможность запускать только один файл тестов.
Каковы ваши предложения?
Ответы
Ответ 1
Обычно разделить тесты на несколько файлов. Я включаю пример того, как вы можете это сделать.
Представьте, что у вас есть 2 файла с тестами, foo_test.dart, bar_test.dart, которые содержат тесты для вашей программы. foo_test.dart может выглядеть примерно так:
library foo_test;
import 'package:unittest/unittest.dart';
void main() {
test('foo test', () {
expect("foo".length, equals(3));
});
}
И bar_test.dart может выглядеть примерно так:
library bar_test;
import 'package:unittest/unittest.dart';
void main() {
test('bar test', () {
expect("bar".length, equals(3));
});
}
Вы можете запустить любой файл, и тест, содержащийся в этом файле, будет выполняться.
Я создам нечто вроде файла all_tests.dart, который будет импортировать тесты из foo_test.dart и bar_test.dart. Вот как выглядит all_tests.dart:
import 'foo_test.dart' as foo_test;
import 'bar_test.dart' as bar_test;
void main() {
foo_test.main();
bar_test.main();
}
Если вы выполнили all_tests.dart, будут выполняться оба теста из foo_test.dart и bar_test.dart.
Одно замечание: для всего этого вам нужно объявить foo_test.dart и bar_test.dart как библиотеки (см. первую строку каждого файла). Затем в файле all_tests.dart вы можете использовать синтаксис импорта для извлечения содержимого объявленных библиотек.
Вот как я организую большинство моих тестов.
Ответ 2
Не нужно иметь несколько файлов для изоляции теста - см. Выполнение только одного теста и Запуск ограниченного набора тестов.
Чтобы изолировать тест, измените test()
на solo_test()
.
Таким образом, вы можете поместить все ваши тесты в один и тот же файл (или на несколько частей).
Ответ 3
Есть инструмент, который делает именно это, Dart Test Runner. Выдержка из этой страницы:
Dart Test Runner автоматически обнаружит и выполнит все тесты в проекте Dart в правильной среде (VM или Browser).
Он обнаруживает любой тестовый файл в файле, помеченном _test.dart
, где ваш тестовый код находится внутри функции main()
. У него нет проблем с обнаружением и запуском unittest.
Это довольно легко установить и запустить. Всего две команды:
$ pub global activate test_runner
$ pub global run test_runner
Для получения дополнительных параметров, пожалуйста, проверьте страницу Dart Test Runner.
Ответ 4
В случае, если это может быть полезно для кого-либо при одновременном запуске нескольких тестов,
Я писал тесты, но мои тестовые файлы names не заканчивались на *_test.dart
Поэтому я не смог запустить все тесты сразу.
Если вы хотите запустить все тесты одновременно, обязательно завершите файл dart с помощью _test.dart.