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