Programación de dardos - Prueba unitaria

La prueba unitaria implica probar cada unidad individual de una aplicación. Ayuda al desarrollador a probar pequeñas funcionalidades sin ejecutar toda la compleja aplicación.

El dardo external library denominado "prueba" proporciona una forma estándar de escribir y ejecutar pruebas unitarias.

La prueba de la unidad de dardos implica los siguientes pasos:

Step 1: Installing the "test" package

Para instalar paquetes de terceros en el proyecto actual, necesitará el pubspec.yamlarchivo. Instalartest packages, primero haga la siguiente entrada en el pubspec.yaml archivo -

dependencies: 
test:

Después de realizar la entrada, haga clic con el botón derecho en el pubspec.yamlfile y obtenga dependencias. Instalará el"test"paquete. A continuación se muestra una captura de pantalla para el mismo en elWebStorm Editor.

Los paquetes se pueden instalar desde command linetambién. Escriba lo siguiente en la terminal:

pub get

Step 2: Importing the "test" package

import "package:test/test.dart";

Step 3 Writing Tests

Las pruebas se especifican mediante la función de nivel superior test(), mientras test assertions están hechos usando el expect()función. Para utilizar estos métodos, deben instalarse comopub dependencia.

Sintaxis

test("Description of the test ", () {  
   expect(actualValue , matchingValue) 
});

los group()La función se puede utilizar para agrupar pruebas. La descripción de cada grupo se agrega al comienzo de las descripciones de su prueba.

Sintaxis

group("some_Group_Name", () { 
   test("test_name_1", () { 
      expect(actual, equals(exptected)); 
   });  
   test("test_name_2", () { 
      expect(actual, equals(expected)); 
   }); 
})

Ejemplo 1: Una prueba aprobatoria

El siguiente ejemplo define un método Add(). Este método toma dos valores enteros y devuelve un entero que representa elsum. Para probar estoadd() método -

Step 1 - Importar el test paquete como se indica a continuación.

Step 2 - Defina la prueba usando el test()función. Aquí eltest() la función usa el expect() función para hacer cumplir una afirmación.

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); 
   }); 
}

Debería producir lo siguiente output -

00:00 +0: test to check add method 
00:00 +1: All tests passed!

Ejemplo 2: una prueba fallida

los subtract()El método definido a continuación tiene un error lógico. El seguimientotest verifica lo mismo.

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 - El caso de prueba para la función add() pasa pero la prueba para subtract() falla como se muestra a continuación.

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)

Agrupación de casos de prueba

Puede agrupar el test casespara que le agregue más significado al código de prueba. Si tienes muchostest cases esto ayuda a escribir un código mucho más limpio.

En el código dado, estamos escribiendo un caso de prueba para el split() función y la trimfunción. Por lo tanto, agrupamos lógicamente estos casos de prueba y los llamamosString.

Ejemplo

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 salida agregará el nombre del grupo para cada caso de prueba como se indica a continuación -

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