Tóm Tắt
JUnit là gì
JUnit là gì?¶
JUnit là một framework dùng để unit test cho ngôn ngữ lập trình Java. (Một unit ở đây có thể là một hàm, phép tính, một module, một class — thường thì người ta sẽ sử dụng method để làm unit test)
JUnit là một mã nguồn mở, miễn phí (Ở bài này mình sẽ giới thiệu về JUnit 4, còn về JUnit 5 thì cơ chế, cấu trúc của nó khác hoàn toàn so với các bản trước đó)
Ví dụ JUnit với Eclipse +Maven¶
Tạo maven project
(Maven Project sẽ tự tạo source folder để viết code src/main/java
và folder để viết test src/test/java
)
Để sử dụng thư viện JUnit ta khai báo
<dependency>
<groupId>
junit</groupId>
<artifactId>
junit</artifactId>
<version>
4.12</version>
<scope>
test</scope>
</dependency>
Mục tiêu của JUnit là kiểm tra kết quả của 1 unit có trả về kết quả giống như mong muốn hay không.
Code nguồn¶
Ví dụ: Ở đây mình có method isPrimeNumber
để kiểm tra một số có phải là số nguyên tố hay không
(Số nguyên tố là số tự nhiên chỉ có hai ước số dương phân biệt là 1 và chính nó. (Số 1 chỉ có một ước số dương là chính nó nên nó không phải là số nguyên tố))
public
class
Demo
{
public
boolean
isPrimeNumber
(
int
input
)
{
for
(
int
i
=
2
;
i
<
input
;
i
++)
{
if
(
input
%
i
==
0
)
return
false
;
}
return
true
;
}
}
Bây giờ ta sẽ sử dụng JUnit để kiểm tra hàm trên với các đầu vào khác nhau:
Code Test¶
Ở đây mình có 6 test case tương ứng với 6 method
public
class
TestDemo
{
@Test
public
void
testIsPrimeNumber1
()
{
Demo
demo1
=
new
Demo
();
boolean
result
=
demo1
.
isPrimeNumber
(-
1
);
assertFalse
(
result
);
}
@Test
public
void
testIsPrimeNumber2
()
{
Demo
demo1
=
new
Demo
();
boolean
result
=
demo1
.
isPrimeNumber
(
0
);
assertFalse
(
result
);
}
@Test
public
void
testIsPrimeNumber3
()
{
Demo
demo1
=
new
Demo
();
boolean
result
=
demo1
.
isPrimeNumber
(
1
);
assertFalse
(
result
);
}
@Test
public
void
testIsPrimeNumber4
()
{
Demo
demo1
=
new
Demo
();
boolean
result
=
demo1
.
isPrimeNumber
(
2
);
assertTrue
(
result
);
}
@Test
public
void
testIsPrimeNumber5
()
{
Demo
demo1
=
new
Demo
();
boolean
result
=
demo1
.
isPrimeNumber
(
4
);
assertFalse
(
result
);
}
@Test
public
void
testIsPrimeNumber6
()
{
Demo
demo1
=
new
Demo
();
boolean
result
=
demo1
.
isPrimeNumber
(
5
);
assertTrue
(
result
);
}
}
- Hàm thứ nhất đầu vào là số âm ‘-1’ nên kết quả mong đợi sẽ là false nên mình dùng
assertFalse
- Hàm thứ hai đầu vào là số 0, 0 không phải là số nguyên tố nên kết quả mong đợi sẽ là false
- Hàm thứ ba đầu vào là số 1, 1 không phải là số nguyên tố nên kết quả mong đợi sẽ là false
- Hàm thứ tư đầu vào là số ‘2’ , 2 là số nguyên tố nên kết quả mong đợi sẽ là true nên mình dùng
assertTrue
- Hàm thứ năm đầu vào là số ‘4’, 4 không phải là số nguyên tố nên kết quả mong đợi sẽ là false
- Hàm thứ sáu đầu vào là số ‘5’, 5 là số nguyên tố nên kết quả mong đợi sẽ là true
Chạy các test case trên (Chuột phải vào class TestDemo.java và chọn Run As JUnit)
Kết quả: (Ở đây mình chạy trên eclipse)
Chạy hết 6 test case trên hết 0.029 giây, thanh trạng thái màu đỏ tức là có test case không pass (3 test case thất bại).
Như bạn thấy trên hình 3 test case đầu tiên bị thất bại tức là method isPrimeNumber
đang bị sai cho những trường hợp đó (do mình quên chưa kiểm tra trường hợp bằng 0 và 1 và nhỏ hơn không)
Bây giờ sửa lại method isPrimeNumber
để fix các lỗi đó:
public
class
Demo
{
public
boolean
isPrimeNumber
(
int
input
)
{
if
(
input
<
2
)
{
return
false
;
}
for
(
int
i
=
2
;
i
<
input
;
i
++)
{
if
(
input
%
i
==
0
)
return
false
;
}
return
true
;
}
}
Chạy lại các test case:
JUnit là gì? Ví dụ JUnit với Eclipse +Maven¶
Tất cả các test case đều pass, thanh trạng thái chuyển màu xanh.
Các bạn có thể thấy các test case của JUnit không cần phải sửa gì cả, và nó cũng không cần quan tâm các method cần kiểm tra thực hiện gì mà chỉ cần quan tâm đầu vào và đầu ra.
(Khi các bạn đi thi thì kết quả đầu ra của các bạn cũng sẽ kiểm tra bằng một bộ các test case và tự động chạy như thế)
JUnit là gì? Ví dụ JUnit với Eclipse +Maven¶
Okay, Done!\
Phần tiếp theo mình sẽ hướng dẫn các bạn thực hiện unit với JUnit cho các trường hợp phức tạp hơn, và giải thích các annotation của JUnit
References:
https://github.com/junit-team/junit4/wiki