Java: JUnit với Netbeans IDE
Định cấu hình Netbeans để sử dụng JUnit
Netbeans đã bao gồm các lớp junit. Vì vậy, ta không cần phải cài đặt.
Tạo và sử dụng các lớp test
Khi tạo một dự án, Netbeans giả định rằng bạn sẽ có các tệp .java nguồn trong một thư mục và các tệp lớp test .java trong một thư mục khác. Ví dụ: Thư mục dự án thường sẽ chứa hai thư mục con là src và test.
Netbeans giả định thư viện junit nên được sử dụng khi biên dịch và chạy lớp thử nghiệm, nhưng nó không được bao gồm trong các thư viện được sử dụng cho các tệp trong src.
Cây Dự án sẽ chứa hai nút (thư mục) cho các thư viện:
[+] Libraries [+] Test Libraries
Nếu bạn quản lý để đặt lớp thử nghiệm trong tệp src cùng với lớp được kiểm tra thay vì trong thư mục Test Package (các test), bạn sẽ cần thêm thư viện junit vào nút Libraries.
- Nhấp chuột phải vào Libraries, chọn Add Library và chọn JUnit từ hộp thoại bật lên.
- Bạn có thể sao chép các tệp .java vào thư mục src hoặc test của dự án, Netbeans sẽ tự động thêm chúng vào dự án. Tuy nhiên, bạn có thể cần phải đóng và mở lại dự án hoặc làm mới nó để Netbeans hiển thị tệp trong cửa sổ điều hướng Gói.
- Lớp thử nghiệm nên:
- import junit.framework.*;
- Quy ước là đặt tên lớp test giống như lớp đang được test nhưng có thêm hậu tố "Test". Ví dụ: nếu lớp đang được test là Student, thì lớp test sẽ được đặt tên là StudentTest (trong file StudentTest.java).
- Lớp test nên exends lớp junit TestCase:
public class StudentTest extends TestCase
- Khi sử dụng các trình soạn thảo chung như notepad và TextPad, bạn sẽ cần thêm một phương thức main vào lớp test (ví dụ như thêm vào lớp StudentTest).
Junit.3.8.1 (nhưng không phải phiên bản 4 mới hơn) có hai cách khác nhau để hiển thị đầu ra (output): một chỉ là đầu ra dạng văn bản, cách còn lại được hiển thị trong giao diện người dùng đồ họa.
Phương thức main gọi một trong hai phương thức tùy thuộc vào việc mong muốn đầu ra văn bản hay đầu ra giao diện người dùng đồ họa.
(Thay StudentTest bằng tên thực của lớp test.) Đầu ra văn bản: public static void main(String[] args) { junit.textui.TestRunner.run(StudentTest.class); } Đầu ra giao diện người dùng đồ họa: public static void main (String[] args) { junit.swingui.TestRunner.run(StudentTest.class); }
- Để thuận tiện cho việc không phải lặp lại các khai báo và khởi tạo biến giống nhau trong một số phương thức test khác nhau, hãy khai báo các biến này dưới dạng thành viên dữ liệu (các property) lớp trong lớp thử nghiệm.
- Viết một quy trình có tên phải là setUp. Phương thức này sẽ được thực thi tự động trước khi mỗi phương thức test được thực thi. Nó phục vụ (lại) khởi tạo các biến phổ biến về trạng thái ban đầu của chúng trước mỗi lần test.
- Viết các phương thức test. Tên của mỗi phương thức test phải có tiền tố là "test".
- Mỗi phương thức test không được có đối số và có kiểu trả về void.
- Khi xây dựng mỗi test, bạn thường cung cấp một biểu thức liên quan đến các phương thức trong lớp sẽ được test và một giá trị mà bạn mong đợi biểu thức đó bằng.
- Lớp JUnit TestCase có các phương thức này được kế thừa bởi lớp test và có thể được sử dụng để xây dựng các test:
assertEquals(giá_trị_mong_đợi, biểu_thức)
assertTrue(boolean_expression)
assertFalse(boolean_expresion)
assertNull(biểu_thức)
assertNotNull(biểuthức)
fail()
Nếu phương thức assertXXX không thành công trong một phương thức test thì phương thức test đó không thành công.
Nếu phương thức fail() được thực thi, nó luôn không thành công. Nó thường được sử dụng có điều kiện. Đó là, bạn có thể viết một câu lệnh if với một lệnh gọi thay thế là fail(). Điều này sẽ phù hợp nếu sự thay thế đó không bao giờ xảy ra. Cách sử dụng phổ biến là với cấu trúc try .. catch. Khối catch chỉ được thực thi nếu một ngoại lệ xảy ra trong khi khối try được thực thi hoàn toàn nếu không có quá trình thực thi nào xảy ra.
Nếu một số mã nên đặt một ngoại lệ, bạn có thể kiểm tra nó bằng cách đặt mã đó vào một khối try và đặt lệnh gọi fail() cũng trong khối try ngay sau mã. Khối catch có thể có phần thân trống. Nếu phương thức fail() được sử dụng, mã không đưa ra một ngoại lệ như nó phải có và phương thức test không thành công!
Nếu một phương thức test không thành công, các phương thức test còn lại vẫn được thực hiện và kết quả đầu ra cho mỗi phương thức là thành công hay không thành công.
Nếu test không thành công, thông tin thêm sẽ được cung cấp. Ví dụ: nếu một lệnh gọi assertEquals không đạt được giá trị mong đợi thì giá trị thực của biểu thức được xuất ra.
Chạy các bài kiểm tra JUnit
- Netbeans nhận dạng các lớp JUnit và menu Run phải có lựa chọn Test ".." sẽ chạy các phương thức test JUnit trong lớp test của bạn và hiển thị kết quả trong cửa sổ JUnit.