tim hieu ve bo cong cu kiem thu junit trong java

30
TÌM HIỂU VỀ BỘ CÔNG CỤ KIỂM THỬ TỰ ĐỘNG JUNIT TRONG JAVA ----------------------------------- --------------------- I. GIỚI THIỆU VỀ JUNIT TRONG JAVA: I.1. JUnit là gì? - JUnit là một framework được dùng cho Unit Test trong Java. Nó là một phần của họ kiến trúc xUnit cho việc tạo các unit testing. - JUnit được xây dựng vào năm 1997 bởi Erich Gamma và Kent Beck- hai người nổi tiếng nhất về lập trình XP. I.2. Đặc điểm của JUnit - Là một phần mềm mã nguồn mở, được phát hành bởi giấy phép IBM’s Common Public License Version 1.0 và được lưu trữ trên Source Forge. - Là bộ công cụ giúp chúng ta xác nhận kết quả kiểm tra một cách tự động. - JUnit hỗ trợ giao diện đồ họa và giao diện dòng lệnh. - Các Test Suite của JUnit cho phép chúng ta dễ dàng tổ chức và chạy các test I.3. Lợi ích khi sử dụng JUnit

description

tin hieu bo cong cu kiem thu tu dong junit trong java

Transcript of tim hieu ve bo cong cu kiem thu junit trong java

Page 1: tim hieu ve bo cong cu kiem thu junit trong java

TÌM HIỂU VỀ BỘ CÔNG CỤ KIỂM THỬ TỰ ĐỘNG JUNIT TRONG JAVA

--------------------------------------------------------

I. GIỚI THIỆU VỀ JUNIT TRONG JAVA:I.1. JUnit là gì?- JUnit là một framework được dùng cho Unit Test trong Java. Nó là

một phần của họ kiến trúc xUnit cho việc tạo các unit testing. - JUnit được xây dựng vào năm 1997 bởi Erich Gamma và Kent Beck-

hai người nổi tiếng nhất về lập trình XP.

I.2. Đặc điểm của JUnit- Là một phần mềm mã nguồn mở, được phát hành bởi giấy phép

IBM’s Common Public License Version 1.0 và được lưu trữ trên Source Forge.

- Là bộ công cụ giúp chúng ta xác nhận kết quả kiểm tra một cách tự động.

- JUnit hỗ trợ giao diện đồ họa và giao diện dòng lệnh.- Các Test Suite của JUnit cho phép chúng ta dễ dàng tổ chức và chạy

các test

I.3. Lợi ích khi sử dụng JUnit- JUnit tách biệt mã kiểm thử ra khỏi chương trình,đồng thời tự động

hóa việc tổ chức và thi hành các bộ số liệu kiểm thử. Do đó, JUnit giúp người lập trình không phải làm đi làm lại những việc kiểm thử với những bộ số liệu nhàm chán.

- Nếu không sử dụng JUnit, ta có thể soạn nhanh bộ số liệu rồi viết ngay vào trong phương thức main() và quan sát ngay kết quả kiểm thử. Vì quá trình soạn số liệu và quá trình kiểm thử diễn ra đồng thời, nên ta sẽ dễ dàng nhận biết được ngay chương trình đã chạy đúng trên bộ số liệu kiểm thử hay không, mà không cần nhìn vào tín hiệu “xanh” mà JUnit có thể hỗ trợ.

Page 2: tim hieu ve bo cong cu kiem thu junit trong java

Tuy nhiên, khi chúng ta muốn tổ chức lại chương trinhg cho hợp lý hơn hoặc phải thay đổi chương trình để phục vụ cho nhu cầu mới, các bộ số liệu kiểm thử trước đây sẽ cần được sử dụng lại để chắc chắn rằng những thay đổi trong chương trình không làm phương hại đến những thành quả trước đó, lúc này ta sẽ phải mất thời gian để tìm hiểu lại xem bộ số liệu trước đây sẽ tương ứng với kết xuất gì vì ta không thể nhớ hết mọi hoạt động kiểm thử đã diễn ra. Nếu phải kiểm thử trên những bộ số liệu lớn thì gánh nặng của việc tổ chức kiểm thử sẽ chồng chất thêm. JUnit giúp người lập trình tự động hóa các công việc nhàm chán trên, và chỉ cần nhìn thấy tín hiệu “xanh” là người lập trình có thể an tâm rằng module đã được lập trình đúng.

II. CÁC PHƯƠNG THỨC SỬ DỤNG PHỔ BIẾN TRONG JUNIT1. ASSERTXXX() - Các phương thức dạng assertXXX() được dùng để kiểm tra các điều

kiện khác nhau.- Trong lớp junit.framework.Assert, ta có các phương thức assertXXX()

khác nhau sau:a. assertEquals()

assertEquals([String message] , expected , actual)Trong đó:

expected : Là giá trị mà bạn hi vọng sẽ đạt đượcactual : Là giá trị thực được sinh ra bởi đoạn code cần test

So sánh hai giá trị expected và actual để kiểm tra bằng nhau. Phép thử thất bại nếu hai giá trị không bằng nhau.b. Boolean assertFalse()

assertFalse([String message], boolean condition)

Đánh giá biểu thức logic. Phép thử thất bại nếu biểu thức đúng.c. Boolean assertNotNull():

assertNotNull([String message], java.lang.Object object)

Page 3: tim hieu ve bo cong cu kiem thu junit trong java

So sánh tham chiếu của một đối tượng với Null. Phép thử thất bại nếu tham chiếu đối tượng Null.d. Boolean assertNotSame():

assertNotSame([String message], expected, actual)Trong đó:

expected : Là giá trị mà bạn hi vọng sẽ đạt đượcactual : Là giá trị thực được sinh ra bởi đoạn code cần test

So sánh địa chỉ vùng nhớ của hai tham chiếu hai đối tượng expected và actual bằng cách sử dụng toán tử ==. Phép thử thất bại trả về nếu cả hai đều tham chiếu đến cùng một đối tượng.e. Boolean assertNull():

assertNull([String message], java.lang.Object object)So sánh tham chiếu của một đối tượng với giá trị Null. Phép thử thất bại nếu đối tượng không là Null.f. Boolean assertSame():

assertSame([String message], expected, actual)

Trong đó: expected : Là giá trị mà bạn hi vọng sẽ đạt đượcactual : Là giá trị thực được sinh ra bởi đoạn code cần test

So sánh địa chỉ vùng nhớ của hai tham chiếu đối tượng expected và actual bằng cách sử dụng toán tử ==. Phép thử thất bại nếu cả hai không tham chiếu đến cùng một đối tượng.g. Boolean assertTrue():

assertTrue([String message], boolean condition)Đánh giá một biểu thức logic. Phép thử thất bại nếu biểu thức sai.h. Void fail(): Phương thức này làm cho test hiện hành thất bại. Phương thức này thường được sử dụng khi xử lý các ngoại lệ.

- Các phương thức test hoạt động bằng cách gọi những phương thức này.

- Mặc dù bạn có thể chỉ cần sử dụng phương thức assertTrue() cho hầu hết các test, tuy nhiên thì việc sử dụng một trong các phương thức

Page 4: tim hieu ve bo cong cu kiem thu junit trong java

assertXXX() cụ thể sẽ làm cho các test của bạn dễ hiểu hơn và cung cấp các thông điệp thất bại rõ ràng hơn.

- Tất cả các phương thức của bảng trên đều nhận vào một String không bắt buộc làm tham số đầu tiên. Khi được xác định, tham số này cung cấp một thông điệp mô tả test thất bại.

2. SETUP ( ) VÀ TEARDOWN( )- Hai phương thức này là một phần của lớp junit.framework.TestCase.- setUp( ) là phương thức tạo ra các đối tượng và dữ liệu cần kiểm tra.- tearDown( ) là phương thức để hủy bỏ chúng.- Khi sử dụng hai phương thức này sẽ giúp chúng ta tránh được việc

trùng mã khi nhiều test cùng chia sẻ nhau ở phần khởi tạo và dọn dẹp các biến.

- JUnit tuân thủ theo một dãy có thứ tự các sự kiện khi chạy các test. Đầu tiên, nó tạo ra một thể hiện mới của Test Case ứng với mỗi phương thức thử. Từ đó, nếu bạn có 5 phương thức thử thì JUnit sẽ tạo ra 5 thể hiện của Test Case. Vì lý do đó, các biến thể hiện không thể được sử dụng để chia sẻ trạng thái giữa các phương thức test. Sau khi tạo xong tất cả các đối tượng test case, JUnit tuân theo các bước sau cho mỗi phương thức test:+ Gọi phương thức SetUp( ) của Test Case+ Gọi phương thức thử+ Gọi phương thức TearDown( ) của Test CaseQuá trình này được lặp lại đối với mỗi phương thức thử trong Test Case.

- Thông thường chúng ta có thể bỏ qua phương thức TearDown( ) vì mỗi phương thức thử riêng không phải là những tiến trình chạy tốn nhiều thời gian và các đối tượng được thu dọn khi máy ảo Java (JVM) thoát.

- Phương thức TearDown( ) có thể được sử dụng khi test của bạn thực hiện những thao tác như mở kết nối đến cơ sở dữ liệu hay sử dụng các loại tài nguyên khác của hệ thống và bạn cần phải dọn dẹp ngay lập tức.

- Nếu bạn chạy một bộ bao gồm một số lượng lớn các unit test thì khi chúng ta trỏ tham chiếu của các đối tượng đến null bên trong thân phương thức TearDown( ) sẽ giúp cho bộ dọn rác lấy lại bộ nhớ khi các test khác chạy.

III. HƯỚNG DẪN CÀI ĐẶT JUNIT TRONG ECLIPSE:- Download JUnit từ địa chỉ http://www.junit.org.

Page 5: tim hieu ve bo cong cu kiem thu junit trong java

- Eclipse cho phép ta cài đặt JUnit để kiểm tra đơn vị các hàm Java ngay bên trong nó.

- Để cấu hình JUnit trong Eclipse ta tiến hành các bước sau:+ Nhấn phải chuột trên tên Project cần kiểm tra và chọn Properties. Hộp thoại mới xuất hiện.

+ Chọn Java Build Path bên cửa sổ phải và tab Libraries bên của sổ trái. Nhấn nút Add Variable.

Page 6: tim hieu ve bo cong cu kiem thu junit trong java

+ Chọn Configure Variable. Nhấn New. Điền tên JUNIT vào tên biến và nhấn vào File để chọn gói JUnit JAR trong thư mục Plugins của Eclipse. Nhấn Ok.

+ Tiếp theo bạn phải thêm một biến nữa dành cho gói JAR nguồn của JUnit, gói này cần cho việc debug chương trình. Nhấn nút New. Điền

Page 7: tim hieu ve bo cong cu kiem thu junit trong java

tên JUNIT_SRC vào phần Name và chọn đường dẫn đến tập tin junitsrc.zip trong thư mục JDT.+ Nhấn OK để trở lại hộp thoại New Variable Classpath Entry.

Bây giờ, ta sẽ gắn biến JUNIT và biến JUNIT_SRC vào đường dẫn lớp (classpath):+ Chọn biến JUNIT và ấn OK, trở lại cửa sổ Java Build Path trong Properties.

+ Nhấn vào kí hiệu dấu + bên cạnh JUNIT, bạn sẽ thấy không có Javadoc và nguồn đính kèm.

Page 8: tim hieu ve bo cong cu kiem thu junit trong java

+ Double-click vào Source Attachment và điền vào tên biến JUNIT_SRC, nhấn OK và kiểm tra đã đính kèm đúng tên tập tin junitsrc.zip+Nhấn OK để lưu lại những thay đổi đường dẫn lớp và đóng cửa sổ Properties.

Lúc này bạn sẽ thấy thư viện JUNIT được liệt kê trong cửa sổ Package Explorer.

Page 9: tim hieu ve bo cong cu kiem thu junit trong java

IV. TIẾN HÀNH KIỂM TRA ĐƠN VỊ VỚI JUNIT:1. Kiểm tra đơn vị sử dụng lớp Test Case:- Test case mô tả một dữ liệu đầu vào (input), hành động (action) hoặc

sự kiện (event) và một kết quả mong đợi (expected response), để xác định một chức năng của ứng dụng phần mềm hoạt động đúng hay không.

- Một test case có thể có các phần đặc thù khác nhau như mã test case, tên test case, mục tiêu test, các điều kiện test, các yêu cầu data input, các bước thực hiện và các kết quả mong đợi. Mức chi tiết có thể được định nghĩa khác nhau dựa vào ngữ cảnh của dự án và quy mô của công ty sản xuất phần mềm.

- Chúng ta dễ dàng tạo lớp Test Case theo các bước như sau :+ Nhấn phải chuột vào tập tin cần kiểm tra. Sau đó click chuột phải vào class chọn New --> Junit Test Case --> chương trình sẽ tự đặt tên theo quy ước chuẩn như sau: • Test Case Class: Được đặt tên [classname]Test.java, với classname là tên của lớp được test. • Test Case Method: Được đặt tên test[methodname], với methodname là tên của phương thức được test. • Test Suite: mặc định tên cho Eclipse là AllTests.java+ Chọn các thư mục Project, các gói và tập tin cần kiểm tra.+ Chọn các phương thức kiểm tra setUp( ) và tearDown( ) cần sử dụng. SetUp( ) là phương thức tạo ra các đối tượng và dữ liệu cần kiểm tra, tearDown( ) là phương thức để hủy bỏ chúng. + Nhấn Next để tiếp tục.+ Hộp thoại mới xuất hiện cho phép bạn chọn các phương thức cần được kiểm tra đơn vị và lớp cha của chúng.+ Nhấn Finish để kết thúc.

- Eclipse sẽ tự động sinh ra tập tin kiểm tra tương ứng mà mình đã chọn ở các bước trước với các phương thức kiểm tra đã chọn.

- Để chạy lớp Test Case, bạn chọn tập tin kiểm tra Test Case. Trên thanh Menu chính, chọn Run->Run As-> JUnit Test.

Page 10: tim hieu ve bo cong cu kiem thu junit trong java

- Khi chạy JUnit, cửa sổ JUnit xuất hiện cho biết kết quả kiểm tra có thành công hay không. Nếu thành công sẽ có thanh màu xanh. Nếu không thành công sẽ xuất hiện thanh màu đỏ.VÍ DỤ MINH HỌA:Xây dựng một lớp DefaultController đơn giản để điều khiển một ứng dụng thực hiện những công việc sau:+ Chấp nhận yêu cầu+ Thực hiện một số tính toán theo yêu cầu + Chọn một yêu cầu phù hợp để xử lý+ Có thể định tuyến đến một bộ xử lý cao hơn cho các lỗi và các ngoại biên.Tiến hành xây dựng lớp điều khiển và sinh các TestCase để kiểm tra lớp trên. Trước hết, ta tiến hành viết code cho lớp DefaultController:Để xây dựng lớp này, ta cần tiến hành xây dựng 4 đối tượng: + Request: Đưa ra yêu cầu+ Response: Trả lời yêu cầu+ RequestHandler: Xử lý yêu cầu+ Controller: Chấp nhận Request, chuyển yêu cầu đến RequestHandler để xử lý và sau đó đưa đến Response để trả lời yêu cầu.Code cho Request, Respone, RequestHandler, Controller Interface :

Page 11: tim hieu ve bo cong cu kiem thu junit trong java

Để xử lý lỗi ta viết thêm một lớp ErrorRespone:

Tiến hành viết code cho lớp DefaultController:

Page 12: tim hieu ve bo cong cu kiem thu junit trong java

Các phương thức trong lớp DefaultController đã giải quyết các chức năng cơ bản cần thiết:

Tiến hành tạo các JUnit Test Case+ Nhấp chuột phải lên Project. Chọn New. Chọn JUnit TestCase.

Page 13: tim hieu ve bo cong cu kiem thu junit trong java

+ Tiến hành nhập các thông tin để tạo lớp TestCase

+ Nhấn Next. Chọn các Phương thức cần kiểm tra

Page 14: tim hieu ve bo cong cu kiem thu junit trong java

+Nhấn Finish. Hộp thoại mới xuất hiện. Chọn Ok.

Cấu trúc Project bây giờ như sau:

Page 15: tim hieu ve bo cong cu kiem thu junit trong java

Tiến hành Code lớp TestDefaultController như sau:

Page 16: tim hieu ve bo cong cu kiem thu junit trong java

Chạy File này ta được:

Page 17: tim hieu ve bo cong cu kiem thu junit trong java

2. Kiểm tra đơn vị sử dụng Test Suite:- Test Suite là một tập hợp các test case định nghĩa cho từng module

hoặc hệ thống con.- Thông thường JUnit tự động tạo ra các Test Suite ứng với mỗi Test

Case. Tuy nhiên bạn muốn tự tạo các Test Suite của riêng mình bằng cách tổ chức các Test vào Test Suite. JUnit cung cấp lớp junit.framework.TestSuite hỗ trợ việc tạo các Test Suite.

- Khi bạn sử dụng giao diện text hay graphic, JUnit sẽ tìm phương thức sau trong test case của bạn

public static Test suite() { … }- Nếu không thấy phương thức trên, JUnit sẽ sử dụng kỹ thuật

reflection để tự động xác định tất cả các phương thức testXXX() trong test case của bạn, rồi thêm chúng vào một test suite. Sau đó nó sẽ chạy tất cả các test trong suite này.

- Để viết một Test Suite, ta thực hiện như sau:+ Nhấp chuột phải lên Project. Chọn New. Chọn Other.

Page 18: tim hieu ve bo cong cu kiem thu junit trong java

+ Hộp thoại mới xuất hiện. Chọn Java ->JUnit->JUnit Test Suite. Nhấn Next.

Page 19: tim hieu ve bo cong cu kiem thu junit trong java

+ Hộp thoại New JUnit Test Suite xuất hiện. Chọn các gói và các test class cần kiểm tra. Nhấn Finish.

- Eclipse sẽ tự động sinh ra Test Suite tương ứng có tên là AllTests.

Page 20: tim hieu ve bo cong cu kiem thu junit trong java

- Để chạy Test Suite, bạn chọn lớp Test Suite. Trên thanh Menu chính, chọn Run->Run As-> JUnit Test. Chọn AllTests.java

Page 21: tim hieu ve bo cong cu kiem thu junit trong java

- Khi chạy,tương tự như Test Case, cửa sổ JUnit xuất hiện cho biết kết quả kiểm tra có thành công hay không. Nếu thành công sẽ có thanh màu xanh. Nếu không thành công sẽ xuất hiện thanh màu đỏ.

- Kết quả Test Suite có tên AllTests vừa trình bày trên:

Page 22: tim hieu ve bo cong cu kiem thu junit trong java

V.TÀI LIỆU THAM KHẢO1. HTTP://WWW.JUNIT.ORG .2. Test Driven Development By Example – Addison Wesley.3. JUNIT IN ACTION- Vicent Massol with Ted Husted.