Программирование дротиков - модульное тестирование
Модульное тестирование включает в себя тестирование каждой отдельной единицы приложения. Это помогает разработчику тестировать небольшие функциональные возможности без запуска всего сложного приложения.
Дротик external library named "test" предоставляет стандартный способ написания и выполнения модульных тестов.
Модульное тестирование Dart включает в себя следующие шаги -
Step 1: Installing the "test" package
Для установки сторонних пакетов в текущий проект вам потребуется pubspec.yamlфайл. Установитьtest packages, сначала сделайте следующую запись в pubspec.yaml файл -
dependencies:
test:
После внесения записи щелкните правой кнопкой мыши значок pubspec.yamlфайл и получить зависимости. Он установит"test"пакет. Ниже приведен снимок экрана того же вWebStorm Редактор.
Пакеты могут быть установлены из command lineтоже. Введите в терминал следующее -
pub get
Step 2: Importing the "test" package
import "package:test/test.dart";
Step 3 Writing Tests
Тесты задаются с помощью функции верхнего уровня test(), в то время как test assertions сделаны с использованием expect()функция. Для использования этих методов они должны быть установлены какpub зависимость.
Синтаксис
test("Description of the test ", () {
expect(actualValue , matchingValue)
});
В group()Функция может использоваться для группировки тестов. Описание каждой группы добавляется в начало описания ее теста.
Синтаксис
group("some_Group_Name", () {
test("test_name_1", () {
expect(actual, equals(exptected));
});
test("test_name_2", () {
expect(actual, equals(expected));
});
})
Пример 1: сдача теста
В следующем примере определяется метод Add(). Этот метод принимает два целых значения и возвращает целое число, представляющееsum. Чтобы проверить этоadd() метод -
Step 1 - Импортировать test пакет, как указано ниже.
Step 2 - Определите тест, используя test()функция. Здесьtest() функция использует expect() функция для принудительного выполнения утверждения.
import 'package:test/test.dart';
// Import the test package
int Add(int x,int y)
// Function to be tested {
return x+y;
}
void main() {
// Define the test
test("test to check add method",(){
// Arrange
var expected = 30;
// Act
var actual = Add(10,20);
// Asset
expect(actual,expected);
});
}
Должно получиться следующее output -
00:00 +0: test to check add method
00:00 +1: All tests passed!
Пример 2: Неудачный тест
В subtract()описанный ниже метод имеет логическую ошибку. Следующееtest подтверждает то же самое.
import 'package:test/test.dart';
int Add(int x,int y){
return x+y;
}
int Sub(int x,int y){
return x-y-1;
}
void main(){
test('test to check sub',(){
var expected = 10;
// Arrange
var actual = Sub(30,20);
// Act
expect(actual,expected);
// Assert
});
test("test to check add method",(){
var expected = 30;
// Arrange
var actual = Add(10,20);
// Act
expect(actual,expected);
// Asset
});
}
Output - Тестовый пример для функции add() проходит, но тест на subtract() не работает, как показано ниже.
00:00 +0: test to check sub
00:00 +0 -1: test to check sub
Expected: <10>
Actual: <9>
package:test expect
bin\Test123.dart 18:5 main.<fn>
00:00 +0 -1: test to check add method
00:00 +1 -1: Some tests failed.
Unhandled exception:
Dummy exception to set exit code.
#0 _rootHandleUncaughtError.<anonymous closure> (dart:async/zone.dart:938)
#1 _microtaskLoop (dart:async/schedule_microtask.dart:41)
#2 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50)
#3 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:394)
#4 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:414)
#5 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)
Группировка тестовых случаев
Вы можете сгруппировать test casesтак что он добавляет больше смысла в ваш тестовый код. Если у вас многоtest cases это помогает писать более чистый код.
В данном коде мы пишем тестовый пример для split() функция и trimфункция. Следовательно, мы логически группируем эти тестовые примеры и называем ихString.
пример
import "package:test/test.dart";
void main() {
group("String", () {
test("test on split() method of string class", () {
var string = "foo,bar,baz";
expect(string.split(","), equals(["foo", "bar", "baz"]));
});
test("test on trim() method of string class", () {
var string = " foo ";
expect(string.trim(), equals("foo"));
});
});
}
Output - К выходным данным будет добавлено имя группы для каждого тестового примера, как указано ниже -
00:00 +0: String test on split() method of string class
00:00 +1: String test on trim() method of string class
00:00 +2: All tests passed