Unit Test là Gì?

Download Report

Transcript Unit Test là Gì?

NỘI DUNG THUYẾT TRÌNH
1
• Unit Test là Gì?
2
• Tại Sao cần sử dụng Unit Test?
3
• Làm Thế Nào sử dụng Unit Test?
4
• Mock trong kiểm thử đơn vị
6
• Unit Test có CSDL như thế nào?
7
• Cài đặt mock, sử dụng mock
8
• Công Cụ Thực Thi Unit test
Unit Test là Gì?
-Một Unit Test là một phần của source
code, thực thi một phần code chính khác
và so sánh kết quả thực tế với kết quả
mong đợi.
- Được thực hiện bởi các lập trình viên.
- Có thể làm bằng tay (Manual Unit Test)
hoặc tự động (Automated Unit Test)
Unit Test là Gì?
Tại Sao cần sử dụng Unit Test?
Đảm bảo tính đúng đắn của những phần cá nhân
Tìm kiếm vấn đề nhanh chóng
Tạo điều kiện thay đổi
Tái Sử Dụng
Thiết Kế
Living Documentation
Simplifies Integration
Thế nào là một good Unit Test?
 Nhỏ và Nhanh
 Tự Động và không tương tác
 Đơn giản để chạy
 Chạy Thành Công
 Độc lập với các unit test khác
 Độc lập với các tài nguyên xác định
bên ngoài
 Lặp lại
 Bao gồm các trường hợp ranh giới
Mock trong kiểm thử đơn vị
Mock là gì?
Mock là 1 kỹ thuật giúp cô lập các lớp khỏi sự phụ
thuộc lẫn nhau nhằm phục vụ cho việc testing. Việc
cô lập này nhằm giúp lập trình viên test được các
hàm và lớp mình viết khi các lớp phụ thuộc chưa
được cài đặt hoàn toàn.
Mock object thường không thực tế, tuy nhiên là hình
mẫu của đối tượng kiểm thử trong trường hợp đặc
biệt và cho phép một cách khác của việc kiểm thử.
Loại đối tượng giả này đôi khi được gọi là đồ
giả (fake).
Mock trong kiểm thử đơn vị
Mock trong kiểm thử đơn vị
Phân loại Mock
- Static mock : được viết bằng tay hay
phát sinh tự động ở một bước nào đó
trong chương trình
- Dynamic mock : phụ thuộc vào proxy
interface
Mock trong kiểm thử đơn vị
Sử dụng mock để làm gì?
- Khi đối tượng thật có những hành vi
khó đoán
- Đối tượng thật khó cài đặt
- Đối tượng thật chậm
Mock trong kiểm thử đơn vị
Có thể dùng nhiều kĩ thuật để test các module
trong chương trình:
 Stubs
 Mock
 Test a servlet
Mock trong kiểm thử đơn vị
CÁCH SỬ DỤNG – STUBS
Các bươc thực hiện:
•Từ những phương thức cần giả lập (Kiểm tra), rút ra
interface.
•Áp dụng interface này cho lớp mình muốn giả lập
(cho lớp này kế thừa interface).
•Cho lớp mock kế thừa từ interface này. Cho phương
thức trả về một giá trị giả mà chúng ta nghĩ chương
trình sẽ trả ra.
•Dùng mock object để test các chức năng liên quan:
•Tạo UnitTest để sử dụng Mock Oject vừa tạo ở trên
Mock trong kiểm thử đơn vị
VÍ DỤ
Kiểm thử một lớp PhepToán
Mock trong kiểm thử đơn vị
Mock trong kiểm thử đơn vị
Mock trong kiểm thử đơn vị
GUI
Để tạo GUI Unit test, ta cũng tạo hàm
giống như 1 Unit test bình thường, bởi
các hàm phát sinh bởi các sự kiện ta có
thể gọi chúng như các hàm bình
thường, qua đó ta viết Unit test truyền
các Input vào hàm và thực thiện kiểm tra
Output tương ứng
GUI
//Ham xu ly khi click button OK
private void OK_Click(object sender,
EventArgs e)
{
if (txtInput.Text == "")
{
MessageBox.Show("No Input!");
return;
}
txtOutput.Text
(int.Parse(txtInput.Text)
int.Parse(txtInput.Text)).ToString();
}
=
*
GUI
//Ham kiem tra ham OK_Click
public void Test_OK_Click()
{
txtInput.Text = "5";
OK_Click(null, null);
if (txtOutput.Text == "25")
MessageBox.Show("OK!");
else
MessageBox.Show("Fail!");
}
Unit Test có CSDL như thế nào?
Kiểm thử CSDL gồm hai loại:
+ Kiểm thử dữ liệu thực (Actual Data
Testing): là kiểm tra nội dung của data có chính
xác hay không, ví dụ: yêu cầu đặt ra là một trang
web phải không có clip sex, clip bạo lực => Việc
Testing cũng phải đảm bảo được điềuđó (sau khi
đưa trang web vào vận hành).
+ Kiểm thử ràng buộc dữ liệu (Database
Integrity Testing): Là các hoạt động kiểm thử
nhằm đảm bảo dữ liệu không bị hỏng, các
schema dữ liệu làđúng đẵn và các chức năng của
các ứng dụng CSDL hoạt động đúng.
Unit Test có CSDL như thế nào?
Cách lập TestCase cho Kiểm thử CSDL?
Xác định Phương pháp kiểm thử trước, sau
đó mới có được các phương thức lập TestCase
tương ứng phù hợp.
Kiểm thử Hộp trắng
Kiểm thử Hộp đen.
Unit Test có CSDL như thế nào?
Cách lập TestCase cho Kiểm thử CSDL?
Xác định Phương pháp kiểm thử trước, sau
đó mới có được các phương thức lập TestCase
tương ứng phù hợp.
Kiểm thử Hộp trắng
Kiểm thử Hộp đen.
Unit Test có CSDL như thế nào?
Với kiểm thử Hộp trắng, có thể sử dụng các
phương pháp:
+ Kiểm tra mã nguồn (Code walk-though):
chính là review Code của các Stored Procedure
+ Chạy nhiều lệnh SQL cùng một lúc: Chạy
nhiều lệnh SQL cùng nhauđể kiểm tra độ đúng
đắn của một Function hay Procedure trong Stored
Procedure
+ Chạy nhiều Stored Procedures cùng một
lúc: tương tự
+ Kiểm tra các Triggers: tương tự
=> Các TestCase tương ứng theo từng loại Test.
Unit Test có CSDL như thế nào?
VÍ DỤ :
Testcase ID: 1
Testcase Name: Kiểm tra trường Student ID là duy nhất
Description: Là testcase dùng để Kiểm tra thuộc tính duy nhất
của mỗi sinh viên
Pre-Requisite:
(1).Database đã có và tồn tại
(2).Có ít nhất 1 record trong bảng với StudentID = 1
Input Data:
(1).Chạy chương trình CSDL (SQL, Oracle hay một DB bạn đang
sử dụng)
(2).Mở cửa sổ lệnh Command Prompt
(3).Chọn Database phù hợp
(4).Nhập lệnh chèn thêm một bản ghi với trường StudentID
giống với record đã có:
"Insert into Students value (1,...,....)
Unit Test có CSDL như thế nào?
(5).Chạy lệnh
(6).Nhập lệnh truy vấn: "Select distinct StudentID,
Count(StudentID)
From Students
Group by StudentID
Having Count(StudentID) > 1"
(7).Chạy truy vấn
Expected Result:
1.Sau step (5), một thông báo lỗi được đưa ra cho
biết giá trị "StudentID = 1" đã tồn tại.
2.Sau step (7), tất cả các record trong bảng hiện ra
với StudentID không trùng nhau
Unit Test có CSDL như thế nào?
Với phương pháp Test hộp đen:
Thiết kế TestCase theo phương pháp
truyền thống
Xác định từng TestCase cho từng item
trên mỗi form và cho toàn bộ chức năng
Làm Thế Nào sử dụng Unit Test?
Giả sử ta có một class Calculator với
các phần như Cộng, Trừ, Nhân, Chia. Ta
cần test class Calculator này
1. Tại solution hiện tại, tạo thêm một
Test project mới tên là 'CalculatorTest'
Làm Thế Nào sử dụng Unit Test?
Làm Thế Nào sử dụng Unit Test?
2. Xóa UnitTest1, thêm vào 1 unit test
mới bằng cách nhấn phải chuột lên
CalculatorTest project rồi chọn Add 
Unit Test
Làm Thế Nào sử dụng Unit Test?
Chọn các phương thức cần test và chọn
OK
Làm Thế Nào sử dụng Unit Test?
3. Sửa lại đoạn code để test theo ý
muốn
4. Để chạy Unit Test
Nhấn chuột phải lên vị trí tại Testcase mà ta cần chạy thử, chọn
Run Test
Làm Thế Nào để tạo Unit Test tốt ?
Mỗi unit test chỉ nên kiểm tra phần cụ thể của
một chức năng nào đó. Chúng ta không nên
kết
hợp nhiều test không liên quan với nhau lại
vào trong một phương thức testXXX()
Khi
Unit
test
cần
chú
ý
:
Test một hàm phải độc lập với các hàm khác
Phải bảo đảm tất cả các trường hợp của dữ
liệu đầu vào. Nghĩa là các test case phải phủ
hết các tình huống có thể xảy ra đối với dữ
liệu.