JUnit là 1 trong những framework đơn giản và dễ dàng dùng cho bài toán tạo các unit testing trường đoản cú động, với chạy những test hoàn toàn có thể lặp đi lặp lại. Nó chỉ là 1 phần của họ phong cách thiết kế x
Unit cho việc tạo các unit testing. JUnit là một chuẩn trên thực tế cho unit testing trong Java. JUnit về xuất phát được viết bởi vì 2 tác giả Erich Gamma với Kent Beck.

Bạn đang xem: Những điều cơ bản về junit

Vào giữa những năm 90 của núm kỷ đôi mươi , Kent Beck đã phát triển một bộ test x
Unit thứ nhất cho Smalltalk .

Beck và Gamma phát triển JUnit trên một chuyến bay từ Zurich đến Washington, DC.Từ kia Junit trở thành công cụ chuẩn cho Test-Driven Development trong Java.Ngày ni , j
Unit được tích phù hợp sẵn trong số Java IDEs (Eclipse, Blue
J, Jbuilder, Dr
Java).

JUnit có thể được cài đặt xuống từ bỏ địa chỉ http://www.junit.org.

2.Những đặc điểm đáng xem xét của JUnit

• chứng thực (assert) câu hỏi kiểm tra kết quả được hy vọng đợi

• những Test Suite đến phép chúng ta dễ dàng tổ chức và chạy những test

• hỗ trợ giao diện hình ảnh và bối cảnh dòng lệnh:Các thử nghiệm case của JUnit là các lớp của Java, những lớp này bao gồm một hay nhiều những phương thức unit testing, và đầy đủ test đó lại được đội thành các Test Suite.Mỗi phương thức test trong JUnit phải được thực hiện nhanh chóng. Vận tốc là điều tối đặc biệt vì càng nhiều test được viết với tích phù hợp vào bên phía trong quá trình thiết kế phần mềm, rất cần được tốn nhiều thời hạn hơn cho câu hỏi chạy toàn bộ Test Suite. Những lập trình viên không muốn bị xa rời trong một khoãng thời gian dài trong khi những test chạy, vì vậy các demo mà chạy càng thọ thì sẽ có không ít khả năng là những lập trình viên sẽ bỏ lỡ bước cũng không hề kém phần đặc trưng này.Các demo trong JUnit có thể là các test được gật đầu hay thất bại, các test này có thiết kế để lúc chạy mà không cần có sự can thiệp của nhỏ người. Từ những xây dựng như thế, chúng ta cũng có thể thêm các bộ demo vào quy trình tích hợp và xây dựng phần mềm một cách tiếp tục và khiến cho các thử nghiệm chạy một giải pháp tự động

3.Kiến trúc tổng quan

*

JUnit thử nghiệm framework hỗ trợ cho bọn họ các gói lớp gồm sẵn cho phép họ viết các phương thức thử nghiệm một giải pháp dễ dàng.Test
Runner đang chạy các test cùng trả về hiệu quả là các Test Results.Các lớp của công tác test bọn họ sẽ được kế thừa những lớp trừu tượng Test
Case.Khi viết các Test Case chúng ta cần biết cùng hiểu lớp Assert class.Một số quan niệm trong quy mô tổng quát:Test case : thử nghiệm case định nghĩa môi trường xung quanh mà nó rất có thể sử dụng để chạy những test không giống nhau
Test
Suite : testsuite là chạy một tập những test case cùng nó cũng đều có thể bao hàm nhiều kiểm tra suite khác, demo suite chính là tổ hợp những test.

4.Tại sao phải tạo 1 thử nghiệm suit?

Hiển nhiên là các bạn phải đánh giá xem đoạn code của công ty có đúng xuất xắc không?

5.Cách viết một kiểm tra case.

Bạn ao ước viết những unit demo với JUnit. Việc đầu tiên bạn phải tạo lập một lớp con thừa kế từ lớp junit.framework.Test
Case. Mỗi unit test được đại diện thay mặt bởi một phương thức test
XXX()
 bên vào lớp bé của lớp Test
Case.Ta gồm một lớp Person như sau:

public class Person private String first
Name; private String last
Name; public Person(String first
Name, String last
Name) if (first
Name == null && last
Name == null) throw new Illegal
Argument
Exception("Both names cannot be null"); this.first
Name = first
Name; this.last
Name = last
Name; public String get
Full
Name() String first = (this.first
Name != null) ? this.first
Name : "?"; String last = (this.last
Name != null) ? this.last
Name : "?"; return first + last; public String get
First
Name() return this.first
Name; public String get
Last
Name() return this.last
Name; kế tiếp ta đã viết một demo case đơn giản để test một vài phương thức của lớp trên

import junit.framework.Test
Case; public class Test
Person extends Test
Case public Test
Person(String name) super(name); /** * Xac nhan rang name duoc the hien dung dinh dang */ public void test
Get
Full
Name() Person p = new Person("Aidan", "Burke"); assert
Equals("Aidan Burke", p.get
Full
Name()); /** * Xac nhan rang nulls da duoc xu ly chinh xac */ public void test
Nulls
In
Name() Person phường = new Person(null, "Burke"); assert
Equals("? Burke", p.get
Full
Name()); phường = new Person("Tanner", null); assert
Equals("Tanner ?", p.get
Full
Name()); Lưu ý: mỗi unit test là 1 trong phương thức public và không tồn tại tham số, được bước đầu bằng tiếp đầu ngữ test. Nếu khách hàng không theo đúng quy tắc đánh tên này thì JUnit sẽ không khẳng định được những phương thức demo một những tự động.

Để biên dịch Test
Person, bọn họ phải khai báo gói tủ sách junit trong trở nên đường môi trường classpath:

set classpath=%classpath%;.;junit.jar javac Test
Person
Để chạy một JUnit Test
Case, ta có 2 cách

Chạy với môi trường xung quanh text, chúng ta gõ lệnh:

java junit.textui.Test
Runner Test
Person
Chạy với môi trường đồ họa java junit.swingui.Test
Runner Test
Person
Chúng ta hoàn toàn có thể chạy thẳng các Test
Case mà không muốn kích hoạt một trong các test runner của JUnit. Chúng ta sẽ thêm phương thức main() vào demo case. Ví dụ:

public class Test
Game extends Test
Case … public static void main(String Runner.run(new Test
Suite(Test
Game.class)) 6.Các cách tiến hành Assert()

Các phương thức assert
XXX() được dùng làm kiểm tra các điều kiện khác nhau.junit.framework.Test
Case, lớp cha cho tất cả các thử nghiệm case, quá kế tự lớp junit.framework.Assert. Lớp này định nghĩa không ít các phương thức assert
XXX(). Các phương thức test hoạt động bằng phương pháp gọi phần đông phương thức này.

Sau đấy là mô tả các phương thức assert
XXX() khác nhau có vào lớp junit.framework.Assert.

assert
Equals(): So sánh 2 cực hiếm để kiểm tra bằng nhau. Test sẽ được gật đầu nếu các giá trị bởi nhau.assert
False(): Đánh giá bán biểu thức luận lý. Demo sẽ được chấp nhận nếu biểu thức sai.assert
Not
Null(): So sánh tham chiếu của một đối tượng người dùng với null. Chạy thử sẽ được đồng ý nếu tham chiếu đối tượng người sử dụng khác null.assert
Not
Same(): So sánh add vùng ghi nhớ của 2 tham chiếu đối tượng bằng cách sử dụng toán tử ==. Demo sẽ được đồng ý nếu cả 2 đều tham chiếu mang lại các đối tượng người sử dụng khác nhauassert
Null(): So sánh tham chiếu của một đối tượng người dùng với cực hiếm null. Thử nghiệm sẽ được gật đầu đồng ý nếu tham chiếu là null.assert
Same(): So sánh showroom vùng nhớ của 2 tham chiếu đối tượng bằng phương pháp sử dụng toán tử ==. Demo sẽ được đồng ý nếu cả hai đều tham chiếu đến cùng một đối tượng.assert
True(): Đánh giá bán một biểu thức luận lý. Test sẽ được gật đầu nếu biểu thức đúng fail(): Phương thức này tạo cho test hiện hành thất bại, cách làm này thường được thực hiện khi xử lý những biệt lệ.

Mặc dù bạn cũng có thể chỉ cần áp dụng phương thức assert
True() cho ngay gần như phần đông các test, tuy vậy thì việc sử dụng một trong những phương thức assert
XXX() cụ thể vẫn làm cho các test của người sử dụng dễ phát âm hơn và cung ứng các thông điệp thất bại cụ thể hơn.

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

Ví dụ:

assert
Equals(employee
A, employee
B); assert
Equals(“Employees should be equal after the clone() operation.”, employee
A, employee
B).Phiên phiên bản thứ 2 được ái mộ hơn bởi vì nó mô tả nguyên nhân test thất bại, điều này để giúp cho vấn đề sửa lỗi được thuận tiện hơn.

Thế nào là một unit test tốt?

Mỗi unit test nên làm kiểm tra phần cụ thể của một chức năng nào đó. Bọn họ không nên phối kết hợp nhiều kiểm tra không tương quan với nhau lại vào vào một phương thức test
XXX().

Ta có một lớp Game như sau:

public class game private bản đồ ships = new Hash
Map(); public Game() throws Bad
Game
Exception public void shutdown() // dummy method public synchronized Ship create
Fighter(String fighter
Id) Ship s = (Ship) this.ships.get(fighter
Id); if (s == null) s = new Ship(fighter
Id); this.ships.put(fighter
Id, s); return s; public boolean is
Playing() return false; public class Bad
Game
Exception extends Exception public Bad
Game
Exception(String s) super(s); kế tiếp ta viết một đoạn chạy thử sau đây:

public void test
Game() throws Bad
Game
Exception trò chơi game = new Game(); Ship fighter = game.create
Fighter(“001”); assert
Equals("Fighter did not have the correct identifier", "001", this.fighter.get
Id()); Ship fighter2 = this.game.create
Fighter("001"); assert
Same("create
Fighter with same id should return same object", fighter, fighter2); assert
True("A new game should not be started yet", !this.game.is
Playing()); Đây là một xây đắp không giỏi vì từng phương thức assert
XXX() đang đánh giá phần không liên quan của chức năng. Giả dụ phương thức assert
Equals() thất bại, phần còn lại của test sẽ không còn được thi hành. Khi xảy ra điều này thì họ sẽ không biết các test khác có đúng công dụng hay không?

Tiếp theo chúng ta sẽ sửa thử nghiệm trên lại để kiểm tra những khía cạnh không giống nhau của trò đùa một phương pháp độc lập.

public void test
Create
Fighter() System.out.println("Begin test
Create
Figher()"); assert
Equals("Fighter did not have the correct identifier", "001", this.fighter.get
Id()); System.out.println("End test
Create
Fighter()"); public void test
Same
Fighters() System.out.println("Begin test
Same
Fighters()"); Ship fighter2 = this.game.create
Fighter("001"); assert
Same("create
Fighter with same id should return same object", this.fighter, fighter2); System.out.println("End test
Same
Fighters()"); public void test
Game
Initial
State() System.out.println("Begin test
Game
Initial
State()"); assert
True("A new trò chơi should not be started yet", !this.game.is
Playing()); System.out.println("End test
Game
Initial
State()"); Với bí quyết tiếp cận này, khi 1 test thất bại sẽ không còn làm cho các mệnh đề assert
XXX() còn lại bị vứt qua.

Có thể bạn sẽ đặt ra câu hỏi có khi nào một thủ tục test chứa đựng nhiều hơn một những phương thứcassert
XXX() hay không? Câu vấn đáp là có. Nếu bạn cần đánh giá một dãy những điều khiếu nại và những test theo sau sẽ luôn luôn thất bại nếu gồm một test đầu tiên thất bại, lúc đó bạn có thể kết hợp các phương thức assert vào vào một test.

7.Set Up cùng Tear Down

Hai phương thức set
Up() và tear
Down() là một phần của lớp junit.framework.Test
Case Bằng biện pháp sử dụng các phương thức set
Up và tear
Down. Khi sử dụng 2 phương thức set
Up() và tear
Down() sẽ giúp bọn họ tránh được việc trùng mã khi những test cùng share nhau ở chỗ khởi sản xuất và vệ sinh các biến.

JUnit tuân thủ theo một dãy có thứ tự các sự kiện khi chạy những test. Đầu tiên, nó tạo thành một thể hiện mới của kiểm tra case ứng cùng với mỗi thủ tục test. Tự đó, nếu như khách hàng có 5 cách tiến hành test thì JUnit sẽ tạo thành 5 thể hiện của demo case. Vì lý do đó, các biến biểu lộ không thể được sử dụng để chia sẻ trạng thái giữa những phương thức test. Sau khoản thời gian tạo kết thúc tất cả các đối tượng người tiêu dùng test case, JUnit tuân theo công việc sau cho từng phương thức test:

Gọi thủ tục set
Up() của kiểm tra case
Gọi thủ tục test
Gọi cách tiến hành tear
Down() của kiểm tra case

Quá trình này được lặp lại đối với mỗi cách thức test trong test case.

Sau đây chúng ta sẽ xem xét ví dụ:

public class Ship private String id; public Ship(String id) this.id = id; public String get
Id() return this.id; public class Test
Game extends Test
Case private game game; private Ship fighter; public void set
Up() throws Bad
Game
Exception this.game = new Game(); this.fighter = this.game.create
Fighter("001"); public void tear
Down() this.game.shutdown(); public void test
Create
Fighter() System.out.println("Begin test
Create
Figher()"); assert
Equals("Fighter did not have the correct identifier""001", this.fighter.get
Id()); System.out.println("End test
Create
Fighter()"); public void test
Same
Fighters() System.out.println("Begin test
Same
Fighters()"); Ship fighter2 = this.game.create
Fighter("001"); assert
Same("create
Fighter with same id should return same object",this.fighter, fighter2); System.out.println("End test
Same
Fighters()"); public void test
Game
Initial
State() System.out.println("Begin test
Game
Initial
State()"); assert
True("A new trò chơi should not be started yet",!this.game.is
Playing()); System.out.println("End test
Game
Initial
State()"); Thông thường bạn cũng có thể bỏ qua phương thức tear
Down() vì từng unit thử nghiệm riêng không phải là những tiến trình chạy tốn những thời gian, với các đối tượng người dùng được dọn dẹp khi JVM thoát. tear
Down() có thể được áp dụng khi test của doanh nghiệp thực hiện những thao tác làm việc như mở liên kết đến cơ sở dữ liệu thường được sử dụng các các loại tài nguyên khác của hệ thống và bạn phải dọn dẹp ngay lập tức. Nếu như bạn chạy một bộ gồm 1 số lượng lớn các unit test, thì khi bạn trỏ tham chiếu của các đối tượng người tiêu dùng đến null phía bên trong thân phương thức tear
Down() sẽ hỗ trợ cho bộ dọn rác mang lại bộ lưu trữ khi các test khác chạy.

Đôi khi bạn muốn chạy vài ba đoạn mã khởi sinh sản chỉ một lần, tiếp nối chạy những phương thức test, và bạn chỉ hy vọng chạy các đoạn mã dọn dẹp chỉ với sau khi toàn bộ test kết thúc. Ở phần trên, JUnit gọi phương thứcset
Up() trước mỗi test và gọi tear
Down() sau khi mỗi thử nghiệm kết thúc, chính vì thế để có tác dụng được điều như trên, họ sẽ thực hiện lớp junit.extension.Test
Setup để dành được yêu cầu trên.

Ví dụ sau đang minh họa việc thực hiện lớp trên:

import junit.extensions.Test
Setup; import junit.framework.*; public class Test
Person extends Test
Case { public Test
Person(String name) super(name); public void test
Get
Full
Name() Person p. = new Person("Aidan", "Burke"); assert
Equals("Aidan Burke", p.get
Full
Name()); public void test
Nulls
In
Name() Person phường = new Person(null, "Burke"); assert
Equals("? Burke", p.get
Full
Name()); p = new Person("Tanner", null); assert
Equals("Tanner ?", p.get
Full
Name()); public static kiểm tra suite() { Test
Setup thiết đặt = new Test
Setup(new Test
Suite(Test
Person.class)) protected void set
Up() throws Exception //Thực hiện những đoạn mã khởi chế tạo một lần ở đây protected void tear
Down() throws Exception //Thực hiện những đoạn mã vệ sinh ở đây return setup; Test
Setup là một tờ thừa kế từ lớp junit.extension.Test
Decorator, Lớp Test
Decorator là lớp các đại lý cho vấn đề định nghĩa các test biến đổi thể. Lý do chính nhằm mở rộng Test
Decorator là để sở hữu được kĩ năng thực thi đoạn mã trước và sau khoản thời gian một thử nghiệm chạy. Các phương thức set
Up() và tear
Down() của lớp Test
Setupđược gọi trước và sau khi bất kỳ Test nào được truyền vào constructor,

Trong lấy ví dụ như trên họ đã truyền một tham số có kiểu Test
Suite vào constructor của lớp Test
Setup

Test
Setup setup = new Test
Setup(new Test
Suite(Test
Person.class)) Điều này tức là 2 phương thức set
Up() được call chỉ một lượt trước tổng thể bộ kiểm tra và tear
Down() được điện thoại tư vấn chỉ một lần sau thời điểm các demo trong cỗ test kết thúc.

Chú ý: các phương thức set
Up() và tear
Down() bên vào lớp Test
Person vẫn được triển khai trước cùng sau mỗi thủ tục test bên trong lớp Test
Person.

8.Tổng kết.

Trên phía trên là nội dung bài viết về tổng quan thực hiện JUnit để hỗ trợ Testing vào Java, hy vọng nội dung bài viết hữu ích cho công việc của những bạn.Thanks!

JUnit là gì?¶

JUnit là một trong framework dùng làm unit kiểm tra cho ngôn từ lập trình Java. (Một unit sinh sống đây có thể là một hàm, phép tính, một module, một class -- thường xuyên thì fan ta sẽ sử dụng method để làm unit test)

JUnit là 1 trong những mã nguồn mở, miễn giá tiền (Ở bài bác này bản thân sẽ ra mắt 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 cùng với các bạn dạng trước đó)

Ví dụ JUnit với Eclipse +Maven¶

Tạo maven project

*

(Maven Project vẫn tự tạo nên source thư mục để viết code src/main/java và thư mục để viết test src/test/java)

Để áp dụng thư viện JUnit ta khai báo


junit junit 4.12 test
Mục tiêu của JUnit là kiểm tra kết quả của 1 unit gồm trả về hiệu quả giống như mong muốn hay không.

Code nguồn

Ví dụ: Ở đây mình gồm method is
Prime
Number để kiểm tra một số có đề nghị là số nguyên tố tuyệt không

(Số nhân tố là số thoải mái và tự nhiên chỉ có hai mong số dương phân biệt là một trong và chủ yếu nó. (Số 1 chỉ bao gồm một ước số dương là chính nó đề nghị nó không hẳn là số nguyên tố))


public class kiểm tra public boolean is
Prime
Number(int input) for (int i = 2; i input; i++) if (input % i == 0) return false; return true;
Bây giờ ta sẽ áp dụng JUnit để soát sổ hàm bên trên với những đầu vào không giống nhau:

Code Test

Ở phía trên mình có 6 kiểm tra case tương ứng với 6 method


public class Test
Demo
Test public void test
Is
Prime
Number1() chạy thử demo1 = new Demo(); boolean result = demo1.is
Prime
Number(-1); assert
False(result);
Test public void test
Is
Prime
Number2() kiểm tra demo1 = new Demo(); boolean result = demo1.is
Prime
Number(0); assert
False(result);
Test public void test
Is
Prime
Number3() demo demo1 = new Demo(); boolean result = demo1.is
Prime
Number(1); assert
False(result);
Test public void test
Is
Prime
Number4() chạy thử demo1 = new Demo(); boolean result = demo1.is
Prime
Number(2); assert
True(result);
Test public void test
Is
Prime
Number5() demo demo1 = new Demo(); boolean result = demo1.is
Prime
Number(4); assert
False(result);
Test public void test
Is
Prime
Number6() thử nghiệm demo1 = new Demo(); boolean result = demo1.is
Prime
Number(5); assert
True(result);
Hàm thứ nhất đầu vào là số âm "-1" nên kết quả mong chờ sẽ là false bắt buộc mình dùng assert
False
Hàm lắp thêm hai đầu vào là số 0, 0 chưa hẳn là số yếu tố nên hiệu quả mong ngóng sẽ là false
Hàm đồ vật ba đầu vào là số 1, 1 không hẳn là số nguyên tố nên công dụng mong hóng sẽ là false
Hàm sản phẩm tư nguồn vào là số "2" , 2 là số thành phần nên kết quả mong ngóng sẽ là true buộc phải mình dùng assert
True
Hàm đồ vật năm nguồn vào là số "4", 4 chưa hẳn là số nguyên tố nên hiệu quả mong ngóng sẽ là false
Hàm trang bị sáu nguồn vào là số "5", 5 là số thành phần nên công dụng mong đợi sẽ là true
Chạy các test case trên (Chuột nên vào class Test
Demo.java và lựa chọn Run As JUnit)

*

Kết quả: (Ở đây mình chạy xe trên eclipse)

*

Chạy hết 6 demo case trên hết 0.029 giây, thanh trạng thái màu sắc đỏ tức là có chạy thử case ko pass (3 demo case thất bại).

Như chúng ta thấy trên hình 3 thử nghiệm case thứ nhất bị thất bại tức là method is
Prime
Number đang bị không nên cho đông đảo trường hợp đó (do mình quên chưa soát sổ trường hợp bởi 0 với 1 và nhỏ tuổi hơn không)

Bây tiếng sửa lại method is
Prime
Number để fix những lỗi đó:


public class test public boolean is
Prime
Number(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 những test case:

*

JUnit là gì? ví dụ như JUnit với Eclipse +Maven¶

Tất cả các test case những pass, thanh trạng thái thay đổi màu sắc xanh.

Xem thêm: Syrup Là Gì? Các Loại Syrup Phổ Biến Trong Công Thức Pha Chế Đồ Uống ?

Các bạn có thể thấy những test case của JUnit không cần thiết phải sửa gì cả, và nó cũng không yêu cầu quan tâm những method bắt buộc kiểm tra thực hiện gì mà chỉ việc quan tâm đầu vào và đầu ra.

(Khi các bạn đi thi thì kết quả đầu ra của chúng ta cũng vẫn kiểm tra bởi một bộ những test case và tự động hóa chạy như thế)

JUnit là gì? lấy ví dụ JUnit cùng với Eclipse +Maven¶

Okay, Done!Phần tiếp theo sau mình đã hướng dẫn chúng ta thực hiện unit với JUnit cho những trường hợp phức hợp hơn, và lý giải các annotation của JUnit