Lập trình Dart - Kiểm tra đơn vị

Unit Testing liên quan đến việc kiểm tra từng đơn vị riêng lẻ của một ứng dụng. Nó giúp nhà phát triển kiểm tra các chức năng nhỏ mà không cần chạy toàn bộ ứng dụng phức tạp.

Phi tiêu external library có tên "test" cung cấp cách viết và chạy các bài kiểm tra đơn vị chuẩn.

Kiểm tra đơn vị phi tiêu bao gồm các bước sau:

Step 1: Installing the "test" package

Để cài đặt các gói của bên thứ ba trong dự án hiện tại, bạn sẽ yêu cầu pubspec.yamltập tin. Để cài đặttest packages, trước tiên hãy thực hiện mục nhập sau trong pubspec.yaml tập tin -

dependencies: 
test:

Sau khi nhập, nhấp chuột phải vào pubspec.yamltệp và nhận các phụ thuộc. Nó sẽ cài đặt"test"gói hàng. Dưới đây là một ảnh chụp màn hình cho cùng một trongWebStorm Biên tập viên.

Các gói có thể được cài đặt từ command linequá. Nhập dòng sau vào terminal -

pub get

Step 2: Importing the "test" package

import "package:test/test.dart";

Step 3 Writing Tests

Kiểm tra được chỉ định bằng cách sử dụng chức năng cấp cao nhất test(), trong khi test assertions được thực hiện bằng cách sử dụng expect()chức năng. Để sử dụng các phương pháp này, chúng phải được cài đặt dưới dạngpub sự phụ thuộc.

Cú pháp

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

Các group()chức năng có thể được sử dụng để nhóm các bài kiểm tra. Mô tả của mỗi nhóm được thêm vào đầu mô tả của thử nghiệm.

Cú pháp

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

Ví dụ 1: Bài kiểm tra vượt qua

Ví dụ sau định nghĩa một phương thức Add(). Phương thức này nhận hai giá trị số nguyên và trả về một số nguyên đại diện chosum. Để kiểm tra điều nàyadd() phương pháp -

Step 1 - Nhập test gói như được đưa ra dưới đây.

Step 2 - Xác định bài kiểm tra bằng cách sử dụng test()chức năng. Đây,test() chức năng sử dụng expect() chức năng để thực thi một khẳng định.

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

Nó sẽ tạo ra những thứ sau output -

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

Ví dụ 2: Bài kiểm tra không đạt

Các subtract()phương pháp được định nghĩa dưới đây có một sai lầm logic. Sautest xác minh tương tự.

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 - Trường hợp thử nghiệm cho chức năng add() vượt qua nhưng bài kiểm tra cho subtract() không thành công như hình dưới đây.

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)

Nhóm các trường hợp kiểm tra

Bạn có thể nhóm test casesđể nó bổ sung thêm ý nghĩa cho mã kiểm tra của bạn. Nếu bạn có nhiềutest cases điều này giúp viết mã sạch hơn nhiều.

Trong đoạn mã đã cho, chúng tôi đang viết một trường hợp thử nghiệm cho split() chức năng và trimchức năng. Do đó, chúng tôi nhóm các trường hợp thử nghiệm này một cách hợp lý và gọi nó làString.

Thí dụ

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 - Đầu ra sẽ thêm tên nhóm cho mỗi trường hợp thử nghiệm như được đưa ra bên dưới -

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