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