Bài giảng Kiểm thử phần mềm - Chương 5: JUnit - Nguyễn Thanh Hùng

Trường Đại Học Bách Khoa Hà Nội  
Viện Công Nghệ Thông Tin &Truyền Thông  
Kiểm thử phần mềm  
JUnit  
TS. Nguyễn Thanh Hùng  
Bộ Môn Công Nghệ Phần Mềm  
JUnit  
Junit là một nền tảng kiểm thử  
- Viết bởi Erich Gamma (Design patterns) và Kent Bech  
(eXtreme Programming)  
- Sử dụng khả năng phản chiếu (Chương trình Java có thể  
kiểm tra chính mã nguồn cuả nó)  
- Cho phép:  
- Định nghĩa và thực hiện kiểm thử và các tập kiểm thử  
- Sử dụng test như một công cụ hiệu quả cho specification  
- Hỗ trợ trên IDEs như BlueJ, Jbuilder, và Eclipse có tích hợp  
sẵn Junit  
- Website về Junit: http://www.junit.org  
Các thuật ngữ về JUnit  
―Test runner‖ là phần mềm chạy kiểm thử  
và báo cáo kết quả  
―Test suite‖ là một tập các trường hợp  
kiểm thử  
―Test case‖ kiểm tra phản ứng của một  
hàm đơn với 1 tập đầu vào  
―Unit test‖ là một kiểm thử của phần tử  
mã nguồn nhỏ nhất có thể kiểm thử,  
thường là một lớp đơn.  
Các thuật ngữ về JUnit  
―Test fixture‖ là môi trường chạy kiểm thử. Một môi trường  
mới được cài đặt trước mỗi lần thực hiện trường hợp kiểm  
thử, và được huỷ bỏ sau đó.  
Ví dụ: để thử nghiệm một CSDL, môi trường kiểm thử có thể thiết  
lập máy chủ ở trạng thái ban đầu chuẩn, sẵn sàng cho khách hàng  
để kết nối.  
―Integration tekết hợp hoạt  
động của nhiều lớp với nhau  
Junit hỗ trợ một phần cho kiểm thử tích hợp  
Cấu trúc của một lớp kiểm thử JUnit  
Chúng ta muốn kiểm thử một lớp tên  
Triangle  
. Đây là kiểm thử đơn vị của lớp Triangle; định  
nghĩa đối tượng sử dụng trong một hay nhiều  
kiểm thử  
public class TriangleTestJ4{  
}
Đây là hàm tạo mặc định:  
public Tri
Cấu trúc của một lớp kiểm thử JUnit  
@Before public void init()  
Tạo một môi trường kiểm thử bằng cách tạo và khởi tạo các  
đối tượng và các giá trị.  
@After public void cleanUp()  
Giải phóng các tài nguyên hệ thống sử dụng bởi môi trường kiểm  
thử. Java thường thực hiện giải phóng tự động, nhưng files, kết nối  
mạng, …, có th
@Test public void noBadTriangles(), @Test public void  
scaleneOk(), etc.  
Các phương thức chứa các tests cho hàm tạo Triangle và phương  
thức isScalene().  
Thực hiên Tests: Assert  
Trong một test:  
. Gọi phương thức được kiểm thử và thu kết  
quả thực tế  
. Assert (xác nhận) một thuộc tính chứa kết  
quả kiểm
. Mỗi assert là một thách thức cho kết quả kiểm  
thử  
Nếu một thuộc tính thất bại, assert sẽ thất  
bại và một đối tượng AssertionFailedError  
được sinh ra  
. Junit sẽ nhận được các lỗi, ghi lại các kết quả  
Thực hiện kiểm thử: Assert  
static void assertTrue(boolean test)  
static void assertTrue(String message,  
boolean test)  
Throws an AssertionFailedError if the test fails.  
The optionan the Error.  
static void assertFalse(boolean test)  
static void assertFalse(String message,  
boolean test)  
Throws an AssertionFailedError if the test  
succeeds.  
Aside: Throwable  
java.lang.Error: a problem that an application would not  
normally try to handle — does not need to be declared in  
throws clause.  
e.g. command line application given bad parameters by user.  
java.lang.Exception: a problem that the application might  
reasonably cope with — needs to be declared in throws  
clause.  
e.g. network connection timed out during connect attempt.  
java.lang.RuntimeException: application might cope with it,  
but rarely — does not need to be declared in throws clause.  
e.g. I/O buffer overflow.  
Triangle class  
For the sake of example, we will create and test a trivial  
Triangle class:  
The constructor creates a Triangle object, where only the  
lengths of the sides are recorded and the private variable p  
is the longest side.  
The isScalene method returns true if the triangle is scalene.  
The isEquilatetriangle is  
equilateral.  
We can write the test methods before the code. This has  
advantages in separating coding from testing.  
But Eclipse helps more if you create the class under test first:  
Creates test stuor all methods and  
constructors.  
Notes on creating tests  
Size: Often the amount of (very routine) test code will  
exceed the size of the code for small systems.  
Complexity: Testing complex code can be a complex  
business and the tests can get quite complex.  
Effort: The effort taken in creating test code is repaid in  
reduced development time, most particularly when we go  
on to use the code).  
Behaviour: Creating a test often helps clarify our ideas on  
how a method should behave (particularly in exceptional  
circumstances).  
A Junit 3 test for Triangle  
import junit.framework.TestCase;  
public class TriangleTest extends TestCase {  
private Triangle t;  
// Any method named setUp will be executed before each test.  
protected void setUp() {  
t = new Triangle(5,4,3);  
}
protected void tearDown() {} // tearDown will be executed afterwards  
public void testIsScalene() { // All tests are named test[Something]  
assertTrue(t.isScalene());  
}
public void testIsEquilateral() {  
assertFalse(t.isEquilateral());  
}
}
A Junit 4 test for Triangle  
The Triangle class itself  
Is JUnit too much for small programs?  
Not if you think it will reduce errors.  
Tests on this scale of program often turn  
up errors or omissions – construct the  
tests working from the specification  
Sometimes you can omit tests for some  
particularly straightforward parts of the  
system  
The Triangle class itself  
public class Triangle {  
private int p; // Longest edge  
private int q;  
private int r;  
public Triangle(int s1, int s2, int s3) {  
if (s1>s2) {  
p = s1; q = s2;  
} else {  
p = s2; q = s1; }  
if (s3>p) {  
r = p; p = s3;  
} else {  
r = s3;  
}
}
public boolean isScalene() {  
return ((r>0) && (q>0) && (p>0) && (p<(q+r))&& ((q>r) || (r>q)));  
}
public boolean isEquilateral() {  
return p == q && q == r;  
}
}
Assert methods II  
assertEquals(expected, actual)  
assertEquals(String message, expected, actual)  
This method is heavily overloaded: expected and actual must be both  
objects or both of the same primitive type. For objects, uses your equals  
method, if you have defined it properly, as public boolean equals(Object  
o) — otherwise it uses ==  
assertSame(Ob
assertSame(String message, Object expected, Object actual)  
Asserts that two objects refer to the same object (using ==)  
assertNotSame(Objectexpected, Objectactual)  
assertNotSame(String message, Object expected, Object actual)  
Asserts that two objects do not refer to the same object  
Assert methods III  
assertNull(Object object)  
assertNull(String message, Object object)  
Asserts that the object is null  
assertNotNull(Object object)  
assertNotNull(String message, Objectobject)  
Asserts that the object is null  
fail()  
fail(String message)  
Causes the test to fail and throw an AssertionFailedError — Useful  
as a result of a complex test, when the other assert methods are not  
quite what you want  
The assert statement in Java  
Earlier versions of JUnit had an assert method instead of an  
assertTrue method — The name had to be changed when  
Java 1.4 introduced the assert statement  
There are two forms of the assert statement:  
. assert boolean_condition;  
. assert boolean_condition: error_message;  
Both forms throw an AssertionFailedError if the boolean condition is  
false. The second form, with an explicit error message, is seldom  
necessary.  
The assert statement in Java  
When to use an assert statement:  
Use it to document a condition that you ‗know‘ to be true  
Use assert false; in code that you ‗know‘ cannot be reached  
(such as a default case in a switch statement)  
Do not use assert to check whether parameters have legal  
values, or other places where throwing an Exception is  
more appropri
Can be dangerous: customers are not impressed by a  
library bombing out with an assertion failure.  
Junit in Eclipse  
Tải về để xem bản đầy đủ
pdf 28 trang yennguyen 203500 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kiểm thử phần mềm - Chương 5: JUnit - Nguyễn Thanh Hùng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_kiem_thu_phan_mem_chuong_5_junit_nguyen_thanh_hung.pdf