Programmation Dart - Test unitaire
Les tests unitaires consistent à tester chaque unité individuelle d'une application. Il aide le développeur à tester de petites fonctionnalités sans exécuter toute l'application complexe.
La fléchette external library nommé "test" fournit un moyen standard d'écrire et d'exécuter des tests unitaires.
Les tests unitaires Dart impliquent les étapes suivantes -
Step 1: Installing the "test" package
Pour installer des packages tiers dans le projet actuel, vous aurez besoin du pubspec.yamlfichier. À installertest packages, commencez par saisir l'entrée suivante dans le pubspec.yaml fichier -
dependencies:
test:
Après avoir effectué la saisie, cliquez avec le bouton droit sur le pubspec.yamlfichier et obtenir les dépendances. Il installera le"test"paquet. Ci-dessous est une capture d'écran pour le même dans leWebStorm Éditeur.
Les packages peuvent être installés à partir du command lineaussi. Tapez ce qui suit dans le terminal -
pub get
Step 2: Importing the "test" package
import "package:test/test.dart";
Step 3 Writing Tests
Les tests sont spécifiés à l'aide de la fonction de niveau supérieur test(), tandis que test assertions sont fabriqués à l'aide du expect()fonction. Pour utiliser ces méthodes, elles doivent être installées en tant quepub dépendance.
Syntaxe
test("Description of the test ", () {
expect(actualValue , matchingValue)
});
le group()La fonction peut être utilisée pour regrouper les tests. La description de chaque groupe est ajoutée au début des descriptions de son test.
Syntaxe
group("some_Group_Name", () {
test("test_name_1", () {
expect(actual, equals(exptected));
});
test("test_name_2", () {
expect(actual, equals(expected));
});
})
Exemple 1: Un test réussi
L'exemple suivant définit une méthode Add(). Cette méthode prend deux valeurs entières et renvoie un entier représentant lesum. Pour tester ceciadd() méthode -
Step 1 - Importez le test paquet comme indiqué ci-dessous.
Step 2 - Définissez le test à l'aide du test()fonction. Ici letest() utilise la fonction expect() fonction pour appliquer une assertion.
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);
});
}
Il devrait produire ce qui suit output -
00:00 +0: test to check add method
00:00 +1: All tests passed!
Exemple 2: Un test échoué
le subtract()La méthode définie ci-dessous comporte une erreur logique. Le suivanttest vérifie la même chose.
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 - Le cas de test de la fonction add() passe mais le test pour subtract() échoue comme indiqué ci-dessous.
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)
Regroupement des cas de test
Vous pouvez regrouper les test casesafin qu'il ajoute plus de sens à votre code de test. Si vous en avez beaucouptest cases cela aide à écrire un code beaucoup plus propre.
Dans le code donné, nous écrivons un cas de test pour le split() fonction et le trimfonction. Par conséquent, nous regroupons logiquement ces cas de test et l'appelonsString.
Exemple
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 - La sortie ajoutera le nom du groupe pour chaque cas de test comme indiqué ci-dessous -
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