Programação Dart - Teste de Unidade

O Teste de Unidade envolve testar cada unidade individual de um aplicativo. Ajuda o desenvolvedor a testar pequenas funcionalidades sem executar todo o aplicativo complexo.

O dardo external library denominado "teste" fornece uma maneira padrão de escrever e executar testes de unidade.

O teste de unidade Dart envolve as seguintes etapas -

Step 1: Installing the "test" package

Para instalar pacotes de terceiros no projeto atual, você precisará do pubspec.yamlArquivo. Para instalartest packages, primeiro faça a seguinte entrada no pubspec.yaml arquivo -

dependencies: 
test:

Depois de fazer a entrada, clique com o botão direito no pubspec.yamlarquivo e obter dependências. Vai instalar o"test"pacote. Dada abaixo está uma captura de tela para o mesmo noWebStorm Editor.

Os pacotes podem ser instalados a partir do command linetambém. Digite o seguinte no terminal -

pub get

Step 2: Importing the "test" package

import "package:test/test.dart";

Step 3 Writing Tests

Os testes são especificados usando a função de nível superior test(), enquanto test assertions são feitos usando o expect()função. Para usar esses métodos, eles devem ser instalados como umpub dependência.

Sintaxe

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

o group()função pode ser usada para agrupar testes. A descrição de cada grupo é adicionada ao início das descrições de seu teste.

Sintaxe

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

Exemplo 1: Um teste de aprovação

O exemplo a seguir define um método Add(). Este método usa dois valores inteiros e retorna um inteiro que representa osum. Para testar issoadd() método -

Step 1 - Importe o test pacote conforme fornecido abaixo.

Step 2 - Defina o teste usando o test()função. Aqui otest() função usa o expect() função para fazer cumprir uma afirmação.

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

Deve produzir o seguinte output -

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

Exemplo 2: Um teste de falha

o subtract()método definido abaixo tem um erro lógico. Os seguintestest verifica o mesmo.

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 - O caso de teste para a função add() passa, mas o teste para subtract() falha conforme mostrado abaixo.

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)

Agrupando Casos de Teste

Você pode agrupar o test casespara que acrescente mais significado ao código de teste. Se você tem muitostest cases isso ajuda a escrever um código muito mais limpo.

No código fornecido, estamos escrevendo um caso de teste para o split() função e o trimfunção. Portanto, agrupamos logicamente esses casos de teste e os chamamosString.

Exemplo

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 - A saída irá anexar o nome do grupo para cada caso de teste, conforme fornecido abaixo -

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