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