JUnit - Hướng dẫn nhanh

Kiểm thử là quá trình kiểm tra chức năng của ứng dụng để đảm bảo ứng dụng chạy theo yêu cầu. Kiểm thử đơn vị đi vào hình ảnh ở cấp độ của các nhà phát triển; nó là thử nghiệm của một thực thể (lớp hoặc phương thức). Kiểm thử đơn vị đóng một vai trò quan trọng trong việc giúp một công ty phần mềm cung cấp các sản phẩm chất lượng cho khách hàng của mình.

Kiểm thử đơn vị có thể được thực hiện theo hai cách - kiểm tra thủ công và kiểm thử tự động.

Kiểm tra bằng tay Kiểm tra tự động
Việc thực thi các trường hợp kiểm thử theo cách thủ công mà không có bất kỳ công cụ hỗ trợ nào được gọi là kiểm thử thủ công. Nhận công cụ hỗ trợ và thực hiện các trường hợp kiểm thử bằng cách sử dụng một công cụ tự động hóa được gọi là kiểm thử tự động hóa.
Time-consuming and tedious - Vì các trường hợp kiểm thử được thực thi bởi nhân lực nên rất chậm và tẻ nhạt. Fast - Tự động hóa chạy các ca kiểm thử nhanh hơn đáng kể so với nguồn nhân lực.
Huge investment in human resources - Vì các trường hợp kiểm thử cần được thực thi thủ công, nên cần có nhiều người kiểm thử hơn trong kiểm thử thủ công. Less investment in human resources - Các trường hợp kiểm thử được thực thi bằng các công cụ tự động hóa, vì vậy cần ít người kiểm thử hơn trong kiểm thử tự động hóa.
Less reliable - Kiểm tra thủ công kém tin cậy hơn, vì nó phải tính đến lỗi của con người. More reliable - Các bài kiểm tra tự động hóa chính xác và đáng tin cậy.
Non-programmable - Không có lập trình nào có thể được thực hiện để viết các bài kiểm tra phức tạp để lấy thông tin ẩn. Programmable - Người kiểm tra có thể lập trình các bài kiểm tra tinh vi để đưa ra thông tin ẩn.

JUnit là gì?

JUnit là một khung kiểm thử đơn vị cho ngôn ngữ lập trình Java. Nó đóng một vai trò quan trọng trong quá trình phát triển theo hướng kiểm tra và là một họ các khuôn khổ kiểm thử đơn vị được gọi chung là xUnit.

JUnit thúc đẩy ý tưởng "thử nghiệm đầu tiên sau đó viết mã", trong đó nhấn mạnh vào việc thiết lập dữ liệu thử nghiệm cho một đoạn mã có thể được thử nghiệm trước và sau đó được thực hiện. Cách tiếp cận này giống như "thử nghiệm một chút, viết mã một chút, thử nghiệm một chút, viết mã một chút." Nó làm tăng năng suất của lập trình viên và tính ổn định của mã chương trình, do đó làm giảm căng thẳng cho lập trình viên và thời gian dành cho việc gỡ lỗi.

Các tính năng của JUnit

  • JUnit là một khung công tác mã nguồn mở, được sử dụng để viết và chạy các bài kiểm tra.

  • Cung cấp các chú thích để xác định các phương pháp kiểm tra.

  • Cung cấp các xác nhận để kiểm tra kết quả mong đợi.

  • Cung cấp người chạy thử để chạy thử nghiệm.

  • Các bài kiểm tra JUnit cho phép bạn viết mã nhanh hơn, điều này làm tăng chất lượng.

  • JUnit đơn giản thanh lịch. Nó ít phức tạp hơn và mất ít thời gian hơn.

  • Các bài kiểm tra JUnit có thể được chạy tự động và chúng tự kiểm tra kết quả và cung cấp phản hồi ngay lập tức. Không cần phải xem lại báo cáo kết quả thử nghiệm theo cách thủ công.

  • Các bài kiểm tra JUnit có thể được tổ chức thành các bộ thử nghiệm chứa các trường hợp thử nghiệm và thậm chí cả các bộ thử nghiệm khác.

  • JUnit hiển thị tiến trình kiểm tra trong một thanh có màu xanh lục nếu quá trình kiểm tra đang diễn ra suôn sẻ và nó chuyển sang màu đỏ khi kiểm tra không thành công.

Unit Test Case là gì?

Unit Test Case là một phần của mã, đảm bảo rằng một phần khác của mã (phương pháp) hoạt động như mong đợi. Để đạt được kết quả mong muốn một cách nhanh chóng, cần phải có một khung kiểm tra. JUnit là một khung kiểm tra đơn vị hoàn hảo cho ngôn ngữ lập trình Java.

Một trường hợp kiểm thử đơn vị được viết chính thức được đặc trưng bởi một đầu vào đã biết và một đầu ra dự kiến, được thực hiện trước khi thử nghiệm được thực hiện. Đầu vào đã biết nên kiểm tra điều kiện trước và đầu ra dự kiến ​​sẽ kiểm tra điều kiện sau.

Phải có ít nhất hai trường hợp thử nghiệm đơn vị cho mỗi yêu cầu - một thử nghiệm dương tính và một thử nghiệm âm tính. Nếu một yêu cầu có các yêu cầu phụ thì mỗi yêu cầu phụ phải có ít nhất hai trường hợp thử nghiệm là tích cực và tiêu cực.

Thiết lập môi trường cục bộ

JUnit là một khuôn khổ cho Java, vì vậy yêu cầu đầu tiên là phải cài đặt JDK trong máy của bạn.

Yêu cầu hệ thống

JDK 1,5 trở lên.
Ký ức Không có yêu cầu tối thiểu.
Dung lượng đĩa Không có yêu cầu tối thiểu.
Hệ điều hành Không có yêu cầu tối thiểu.

Bước 1: Xác minh cài đặt Java trong máy của bạn

Trước hết, hãy mở bảng điều khiển và thực hiện một lệnh java dựa trên hệ điều hành bạn đang làm việc.

Hệ điều hành Bài tập Chỉ huy
các cửa sổ Mở bảng điều khiển lệnh c: \> java -version
Linux Mở Command Terminal $ java -version
Mac Mở thiết bị đầu cuối máy: ~ joseph $ java -version

Hãy xác minh kết quả đầu ra cho tất cả các hệ điều hành -

Hệ điều hành Đầu ra
các cửa sổ

phiên bản java "1.8.0_101"

Môi trường thời gian chạy Java (TM) SE (bản dựng 1.8.0_101)

Linux

phiên bản java "1.8.0_101"

Môi trường thời gian chạy Java (TM) SE (bản dựng 1.8.0_101)

Mac

phiên bản java "1.8.0_101"

Môi trường thời gian chạy Java (TM) SE (bản dựng 1.8.0_101)

Nếu bạn chưa cài đặt Java trên hệ thống của mình, hãy tải xuống Bộ phát triển phần mềm Java (SDK) từ liên kết sau https://www.oracle.com. Chúng tôi giả sử Java 1.8.0_101 là phiên bản đã cài đặt cho hướng dẫn này.

Bước 2: Đặt Môi trường JAVA

Đặt JAVA_HOMEbiến môi trường để trỏ đến vị trí thư mục cơ sở nơi Java được cài đặt trên máy của bạn. Ví dụ.

Hệ điều hành Đầu ra
các cửa sổ Đặt biến môi trường JAVA_HOME thành C: \ Program Files \ Java \ jdk1.8.0_101
Linux xuất JAVA_HOME = / usr / local / java-current
Mac export JAVA_HOME = / Library / Java / Home

Nối vị trí trình biên dịch Java vào Đường dẫn Hệ thống.

Hệ điều hành Đầu ra
các cửa sổ Nối chuỗi C:\Program Files\Java\jdk1.8.0_101\bin ở cuối biến hệ thống, Path.
Linux xuất PATH = $PATH:$JAVA_HOME / bin /
Mac không yêu cầu

Xác minh cài đặt Java bằng lệnh java -version Như đã giải thích ở trên.

Bước 3: Tải xuống JUnit Archive

Tải xuống phiên bản mới nhất của tệp jar JUnit từ http://www.junit.org. Tại thời điểm viết hướng dẫn này, chúng tôi đã tải xuống Junit-4.12.jar và sao chép nó vào thư mục C: \> JUnit.

Hệ điều hành Tên lưu trữ
các cửa sổ junit4.12.jar
Linux junit4.12.jar
Mac junit4.12.jar

Bước 4: Đặt môi trường JUnit

Đặt JUNIT_HOMEbiến môi trường để trỏ đến vị trí thư mục cơ sở nơi lưu trữ jar JUNIT trên máy của bạn. Giả sử chúng ta đã lưu trữ junit4.12.jar trong thư mục JUNIT.

Sr.No Hệ điều hành & Mô tả
1

Windows

Đặt biến môi trường JUNIT_HOME thành C: \ JUNIT

2

Linux

xuất JUNIT_HOME = / usr / local / JUNIT

3

Mac

xuất JUNIT_HOME = / Library / JUNIT

Bước 5: Đặt biến CLASSPATH

Đặt CLASSPATH biến môi trường để trỏ đến vị trí jar JUNIT.

Sr.No Hệ điều hành & Mô tả
1

Windows

Đặt biến môi trường CLASSPATH thành% CLASSPATH%;% JUNIT_HOME% \ junit4.12.jar;.;

2

Linux

xuất CLASSPATH = $CLASSPATH:$JUNIT_HOME / junit4.12.jar:.

3

Mac

xuất CLASSPATH = $CLASSPATH:$JUNIT_HOME / junit4.12.jar:.

Bước 6: Kiểm tra thiết lập JUnit

Tạo tên tệp lớp java TestJunit trong C:\>JUNIT_WORKSPACE

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
   @Test
	
   public void testAdd() {
      String str = "Junit is working fine";
      assertEquals("Junit is working fine",str);
   }
}

Tạo tên tệp lớp java TestRunner trong C:\>JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Bước 7: Xác minh kết quả

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -

C:\JUNIT_WORKSPACE>javac TestJunit.java TestRunner.java

Bây giờ chạy Test Runner để xem kết quả như sau:

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra.

true

JUnit là một Regression Testing Frameworkđược các nhà phát triển sử dụng để triển khai kiểm thử đơn vị trong Java, đồng thời đẩy nhanh tốc độ lập trình và tăng chất lượng mã. JUnit Framework có thể được tích hợp dễ dàng với một trong hai cách sau:

  • Eclipse
  • Ant
  • Maven

Các tính năng của Khung kiểm tra JUnit

Khung thử nghiệm JUnit cung cấp các tính năng quan trọng sau:

  • Fixtures
  • Bộ thử nghiệm
  • Người chạy thử
  • Các lớp JUnit

Đồ đạc

Fixtureslà một trạng thái cố định của một tập hợp các đối tượng được sử dụng làm đường cơ sở để chạy các bài kiểm tra. Mục đích của bộ cố định kiểm tra là đảm bảo rằng có một môi trường cố định và nổi tiếng trong đó các thử nghiệm được chạy để kết quả có thể lặp lại. Nó bao gồm -

  • Phương thức setUp (), chạy trước mọi lệnh gọi kiểm tra.
  • Phương thức drawDown (), chạy sau mọi phương thức thử nghiệm.

Hãy kiểm tra một ví dụ -

import junit.framework.*;

public class JavaTest extends TestCase {
   protected int value1, value2;
   
   // assigning the values
   protected void setUp(){
      value1 = 3;
      value2 = 3;
   }

   // test method to add two values
   public void testAdd(){
      double result = value1 + value2;
      assertTrue(result == 6);
   }
}

Bộ thử nghiệm

Một bộ thử nghiệm bao gồm một vài trường hợp thử nghiệm đơn vị và chạy chúng cùng nhau. Trong JUnit, cả chú thích @RunWith và @Suite đều được sử dụng để chạy thử nghiệm bộ. Dưới đây là một ví dụ sử dụng các lớp kiểm tra TestJunit1 & TestJunit2.

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

//JUnit Suite Test
@RunWith(Suite.class)

@Suite.SuiteClasses({ 
   TestJunit1.class ,TestJunit2.class
})

public class JunitTestSuite {
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit1 {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");    
      assertEquals(message, messageUtil.printMessage());     
   }
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit2 {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
 
   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Người chạy thử nghiệm

Người chạy thử nghiệm được sử dụng để thực hiện các trường hợp thử nghiệm. Đây là một ví dụ giả sử lớp thử nghiệmTestJunit đã tồn tại.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Lớp JUnit

Các lớp JUnit là các lớp quan trọng, được sử dụng để viết và thử nghiệm các JUnits. Một số lớp quan trọng là -

  • Assert - Chứa một tập hợp các phương thức khẳng định.

  • TestCase - Chứa một trường hợp thử nghiệm xác định vật cố định để chạy nhiều thử nghiệm.

  • TestResult - Chứa các phương thức thu thập kết quả thực hiện test case.

Bây giờ chúng ta hãy xem một ví dụ cơ bản để chứng minh quy trình từng bước sử dụng JUnit.

Tạo một lớp học

Tạo một lớp java để được kiểm tra, chẳng hạn như MessageUtil.java trong C:\>JUNIT_WORKSPACE

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
	
   public MessageUtil(String message){
      this.message = message;
   }
      
   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   
}

Tạo lớp trường hợp thử nghiệm

  • Tạo một lớp thử nghiệm java, chẳng hạn như TestJunit.java.
  • Thêm một phương pháp thử testPrintMessage () vào lớp thử nghiệm của bạn.
  • Thêm Annotaion @Test vào phương thức testPrintMessage ().
  • Triển khai điều kiện thử nghiệm và kiểm tra điều kiện bằng API khẳng định của JUnit.

Tạo tên tệp lớp java TestJunit.java trong C:\>JUNIT_WORKSPACE.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
	
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      assertEquals(message,messageUtil.printMessage());
   }
}

Tạo lớp chạy thử nghiệm

  • Tạo một lớp java TestRunner.
  • Sử dụng phương thức runClasses của lớp JUnitCore của JUnit để chạy test case của lớp test đã tạo ở trên.
  • Nhận kết quả của các trường hợp thử nghiệm chạy trong Đối tượng Kết quả.
  • Nhận (các) lỗi bằng cách sử dụng phương thức getFailures () của đối tượng Kết quả.
  • Nhận kết quả Thành công bằng phương thức wasSuccessful () của đối tượng Result.

Tạo tệp lớp java có tên TestRunner.java trong C:\>JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp MessageUtil, Test case và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Bây giờ chạy Test Runner, sẽ chạy trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra.

Hello World
true

Bây giờ hãy cập nhật TestJunit trong C:\>JUNIT_WORKSPACEđể kiểm tra không thành công. Thay đổi chuỗi thông báo.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
	
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      message = "New Word";
      assertEquals(message,messageUtil.printMessage());
   }
}

Hãy giữ nguyên phần còn lại của các lớp và cố gắng chạy cùng một Trình chạy thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {

   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Bây giờ chạy Test Runner, sẽ chạy trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra.

Hello World
testPrintMessage(TestJunit): expected:<[New Wor]d> but was:<[Hello Worl]d>
false

Gói quan trọng nhất trong JUnit là junit.framework, chứa tất cả các lớp cốt lõi. Một số lớp quan trọng như sau:

Sr.No. Tên lớp Chức năng
1 Khẳng định Một tập hợp các phương pháp khẳng định.
2 TestCase Một trường hợp thử nghiệm xác định vật cố định để chạy nhiều thử nghiệm.
3 Kết quả kiểm tra TestResult thu thập kết quả của việc thực thi một trường hợp kiểm thử.
4 TestSuite TestSuite là một tổ hợp các bài kiểm tra.

Khẳng định lớp học

Sau đây là khai báo cho org.junit.Assert lớp học -

public class Assert extends java.lang.Object

Lớp này cung cấp một tập hợp các phương thức khẳng định hữu ích cho việc viết các bài kiểm tra. Chỉ những xác nhận không thành công mới được ghi lại. Một số phương thức quan trọng của lớp Assert như sau:

Sr.No. Phương pháp & Mô tả
1

void assertEquals(boolean expected, boolean actual)

Kiểm tra xem hai đối tượng / nguyên thủy có bằng nhau không.

2

void assertFalse(boolean condition)

Kiểm tra rằng một điều kiện là sai.

3

void assertNotNull(Object object)

Kiểm tra xem một đối tượng không phải là rỗng.

4

void assertNull(Object object)

Kiểm tra xem một đối tượng có rỗng không.

5

void assertTrue(boolean condition)

Kiểm tra xem một điều kiện là đúng.

6

void fail()

Không kiểm tra được không có thông báo.

Hãy sử dụng một số phương pháp được đề cập ở trên trong một ví dụ. Tạo tệp lớp java có tên TestJunit1.java trongC:\>JUNIT_WORKSPACE.

import org.junit.Test;
import static org.junit.Assert.*;

public class TestJunit1 {
   @Test
   public void testAdd() {
      //test data
      int num = 5;
      String temp = null;
      String str = "Junit is working fine";

      //check for equality
      assertEquals("Junit is working fine", str);
      
      //check for false condition
      assertFalse(num > 6);

      //check for not null value
      assertNotNull(temp);
   }
}

Tiếp theo, tạo một tệp lớp java có tên TestRunner1.java trong C: \> JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner1 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit1.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp test case và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac TestJunit1.java TestRunner1.java

Bây giờ chạy Test Runner, sẽ chạy trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner1

Xác minh kết quả đầu ra.

true

Lớp TestCase

Sau đây là khai báo cho org.junit.TestCase lớp học -

public abstract class TestCase extends Assert implements Test

Một trường hợp thử nghiệm xác định vật cố định để chạy nhiều thử nghiệm. Một số phương pháp quan trọng củaTestCase lớp như sau -

Sr.No. Phương pháp & Mô tả
1

int countTestCases()

Đếm số lượng các trường hợp kiểm thử được thực thi khi chạy (kết quả TestResult).

2

TestResult createResult()

Tạo một đối tượng TestResult mặc định.

3

String getName()

Lấy tên của TestCase.

4

TestResult run()

Một phương pháp thuận tiện để chạy thử nghiệm này, thu thập kết quả với một đối tượng TestResult mặc định.

5

void run(TestResult result)

Chạy trường hợp kiểm thử và thu thập kết quả trong TestResult.

6

void setName(String name)

Đặt tên của TestCase.

7

void setUp()

Thiết lập đồ đạc, chẳng hạn như mở kết nối mạng.

số 8

void tearDown()

Làm rơi đồ đạc, chẳng hạn như đóng kết nối mạng.

9

String toString()

Trả về biểu diễn chuỗi của trường hợp thử nghiệm.

Hãy sử dụng một số phương pháp được đề cập ở trên trong một ví dụ. Tạo tệp lớp java có tênTestJunit2.java trong C: \> JUNIT_WORKSPACE.

import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;

public class TestJunit2 extends TestCase  {
   protected double fValue1;
   protected double fValue2;
   
   @Before 
   public void setUp() {
      fValue1 = 2.0;
      fValue2 = 3.0;
   }
	
   @Test
   public void testAdd() {
      //count the number of test cases
      System.out.println("No of Test Case = "+ this.countTestCases());
		
      //test getName 
      String name = this.getName();
      System.out.println("Test Case Name = "+ name);

      //test setName
      this.setName("testNewAdd");
      String newName = this.getName();
      System.out.println("Updated Test Case Name = "+ newName);
   }
	
   //tearDown used to close the connection or clean up activities
   public void tearDown(  ) {
   }
}

Tiếp theo, tạo một tệp lớp java có tên TestRunner2.java trong C: \> JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner2 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit2.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp test case và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac TestJunit2.java TestRunner2.java

Bây giờ chạy Test Runner, sẽ chạy trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner2

Xác minh kết quả đầu ra.

No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
true

Lớp TestResult

Sau đây là khai báo cho org.junit.TestResult lớp học -

public class TestResult extends Object

TestResult thu thập kết quả của việc thực thi một trường hợp kiểm thử. Nó là một ví dụ của mẫu Tham số thu thập. Khung kiểm tra phân biệt giữa lỗi và lỗi. Sự thất bại được dự đoán trước và được kiểm tra bằng các xác nhận. Lỗi là những vấn đề không lường trước được như ArrayIndexOutOfBoundsException. Một số phương pháp quan trọng củaTestResult lớp như sau -

Sr.No. Phương pháp & Mô tả
1

void addError(Test test, Throwable t)

Thêm một lỗi vào danh sách các lỗi.

2

void addFailure(Test test, AssertionFailedError t)

Thêm lỗi vào danh sách lỗi.

3

void endTest(Test test)

Thông báo kết quả rằng một bài kiểm tra đã được hoàn thành.

4

int errorCount()

Nhận số lỗi được phát hiện.

5

Enumeration<TestFailure> errors()

Trả về một Bảng kê cho các lỗi.

6

int failureCount()

Nhận số lỗi được phát hiện.

7

void run(TestCase test)

Chạy TestCase.

số 8

int runCount()

Nhận số lần chạy thử nghiệm.

9

void startTest(Test test)

Thông báo kết quả rằng một bài kiểm tra sẽ được bắt đầu.

10

void stop()

Đánh dấu rằng quá trình chạy thử nghiệm sẽ dừng lại.

Tạo tệp lớp java có tên TestJunit3.java trong C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import junit.framework.AssertionFailedError;
import junit.framework.TestResult;

public class TestJunit3 extends TestResult {
   // add the error
   public synchronized void addError(Test test, Throwable t) {
      super.addError((junit.framework.Test) test, t);
   }

   // add the failure
   public synchronized void addFailure(Test test, AssertionFailedError t) {
      super.addFailure((junit.framework.Test) test, t);
   }
	
   @Test
   public void testAdd() {
      // add any test
   }
   
   // Marks that the test run should stop.
   public synchronized void stop() {
      //stop the test here
   }
}

Tiếp theo, tạo một tệp lớp java có tên TestRunner3.java trong C: \> JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner3 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit3.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp test case và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac TestJunit3.java TestRunner3.java

Bây giờ chạy Test Runner, sẽ chạy trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner3

Xác minh kết quả đầu ra.

true

Lớp TestSuite

Sau đây là khai báo cho org.junit.TestSuite lớp học:

public class TestSuite extends Object implements Test

TestSuite là Tổng hợp các bài kiểm tra. Nó chạy một bộ sưu tập các trường hợp thử nghiệm. Một số phương pháp quan trọng củaTestSuite lớp như sau -

Sr.No. Phương pháp & Mô tả
1

void addTest(Test test)

Thêm một bài kiểm tra vào bộ.

2

void addTestSuite(Class<? extends TestCase> testClass)

Thêm các bài kiểm tra từ lớp đã cho vào bộ.

3

int countTestCases()

Đếm số lượng trường hợp thử nghiệm sẽ được chạy bởi thử nghiệm này.

4

String getName()

Trả về tên của bộ.

5

void run(TestResult result)

Chạy các bài kiểm tra và thu thập kết quả của chúng trong một TestResult.

6

void setName(String name)

Đặt tên của bộ.

7

Test testAt(int index)

Trả về bài kiểm tra ở chỉ số đã cho.

số 8

int testCount()

Trả về số lượng bài kiểm tra trong bộ này.

9

static Test warning(String message)

Trả về một bài kiểm tra sẽ không thành công và ghi lại một thông báo cảnh báo.

Tạo tệp lớp java có tên JunitTestSuite.java trong C: \> JUNIT_WORKSPACE để tạo Bộ thử nghiệm.

import junit.framework.*;

public class JunitTestSuite {
   public static void main(String[] a) {
      // add the test's in the suite
      TestSuite suite = new TestSuite(TestJunit1.class, TestJunit2.class, TestJunit3.class );
      TestResult result = new TestResult();
      suite.run(result);
      System.out.println("Number of test cases = " + result.runCount());
   }
}

Biên dịch các lớp Bộ thử nghiệm bằng javac.

C:\JUNIT_WORKSPACE>javac JunitTestSuite.java

Bây giờ hãy chạy Bộ thử nghiệm.

C:\JUNIT_WORKSPACE>java JunitTestSuite

Xác minh kết quả đầu ra.

No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
Number of test cases = 3

Ở đây chúng ta sẽ thấy một ví dụ hoàn chỉnh về kiểm thử JUnit bằng cách sử dụng lớp POJO, lớp logic nghiệp vụ và một lớp thử nghiệm, sẽ được chạy bởi trình chạy thử nghiệm.

Tạo nên EmployeeDetails.java trong C: \> JUNIT_WORKSPACE, là một lớp POJO.

public class EmployeeDetails {

   private String name;
   private double monthlySalary;
   private int age;
   
   /**
   * @return the name
   */
	
   public String getName() {
      return name;
   }
	
   /**
   * @param name the name to set
   */
	
   public void setName(String name) {
      this.name = name;
   }
	
   /**
   * @return the monthlySalary
   */
	
   public double getMonthlySalary() {
      return monthlySalary;
   }
	
   /**
   * @param monthlySalary the monthlySalary to set
   */
	
   public void setMonthlySalary(double monthlySalary) {
      this.monthlySalary = monthlySalary;
   }
	
   /**
   * @return the age
   */
   public int getAge() {
      return age;
   }
	
   /**
   * @param age the age to set
   */
   public void setAge(int age) {
      this.age = age;
   }
}

EmployeeDetails lớp đã quen với -

  • lấy / đặt giá trị của tên nhân viên.
  • lấy / đặt giá trị tiền lương hàng tháng của nhân viên.
  • lấy / đặt giá trị tuổi của nhân viên.

Tạo một tệp có tên EmpBusinessLogic.java trong C: \> JUNIT_WORKSPACE, chứa logic nghiệp vụ.

public class EmpBusinessLogic {
   // Calculate the yearly salary of employee
   public double calculateYearlySalary(EmployeeDetails employeeDetails) {
      double yearlySalary = 0;
      yearlySalary = employeeDetails.getMonthlySalary() * 12;
      return yearlySalary;
   }
	
   // Calculate the appraisal amount of employee
   public double calculateAppraisal(EmployeeDetails employeeDetails) {
      double appraisal = 0;
		
      if(employeeDetails.getMonthlySalary() < 10000){
         appraisal = 500;
      }else{
         appraisal = 1000;
      }
		
      return appraisal;
   }
}

EmpBusinessLogic lớp được sử dụng để tính toán -

  • lương hàng năm của một nhân viên.
  • lượng thẩm định của một nhân viên.

Tạo một tệp có tên TestEmployeeDetails.java trong C: \> JUNIT_WORKSPACE, chứa các trường hợp thử nghiệm sẽ được kiểm tra.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestEmployeeDetails {
   EmpBusinessLogic empBusinessLogic = new EmpBusinessLogic();
   EmployeeDetails employee = new EmployeeDetails();

   //test to check appraisal
   @Test
   public void testCalculateAppriasal() {
      employee.setName("Rajeev");
      employee.setAge(25);
      employee.setMonthlySalary(8000);
		
      double appraisal = empBusinessLogic.calculateAppraisal(employee);
      assertEquals(500, appraisal, 0.0);
   }

   // test to check yearly salary
   @Test
   public void testCalculateYearlySalary() {
      employee.setName("Rajeev");
      employee.setAge(25);
      employee.setMonthlySalary(8000);
		
      double salary = empBusinessLogic.calculateYearlySalary(employee);
      assertEquals(96000, salary, 0.0);
   }
}

TestEmployeeDetails lớp được sử dụng để kiểm tra các phương pháp của EmpBusinessLogiclớp học. Nó

  • kiểm tra mức lương hàng năm của nhân viên.
  • kiểm tra số lượng thẩm định của nhân viên.

Tiếp theo, tạo một lớp java được đặt tên là TestRunner.java trong C: \> JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestEmployeeDetails.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp test case và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac EmployeeDetails.java 
EmpBusinessLogic.java TestEmployeeDetails.java TestRunner.java

Bây giờ chạy Test Runner, sẽ chạy trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra.

true

Quả quyết

Tất cả các xác nhận đều nằm trong lớp Assert.

public class Assert extends java.lang.Object

Lớp này cung cấp một tập hợp các phương thức khẳng định, hữu ích cho việc viết các bài kiểm tra. Chỉ những xác nhận không thành công mới được ghi lại. Một số phương thức quan trọng của lớp Assert như sau:

Sr.No. Phương pháp & Mô tả
1

void assertEquals(boolean expected, boolean actual)

Kiểm tra xem hai đối tượng / nguyên thủy có bằng nhau không.

2

void assertTrue(boolean condition)

Kiểm tra xem một điều kiện là đúng.

3

void assertFalse(boolean condition)

Kiểm tra rằng một điều kiện là sai.

4

void assertNotNull(Object object)

Kiểm tra xem một đối tượng không phải là rỗng.

5

void assertNull(Object object)

Kiểm tra xem một đối tượng có rỗng không.

6

void assertSame(object1, object2)

Phương thức khẳng định () kiểm tra nếu hai tham chiếu đối tượng trỏ đến cùng một đối tượng.

7

void assertNotSame(object1, object2)

Phương thức statementNotSame () kiểm tra nếu hai tham chiếu đối tượng không trỏ đến cùng một đối tượng.

số 8

void assertArrayEquals(expectedArray, resultArray);

Phương thức khẳng địnhArrayEquals () sẽ kiểm tra xem hai mảng có bằng nhau hay không.

Hãy sử dụng một số phương pháp được đề cập ở trên trong một ví dụ. Tạo tệp lớp java có tênTestAssertions.java trong C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import static org.junit.Assert.*;

public class TestAssertions {

   @Test
   public void testAssertions() {
      //test data
      String str1 = new String ("abc");
      String str2 = new String ("abc");
      String str3 = null;
      String str4 = "abc";
      String str5 = "abc";
		
      int val1 = 5;
      int val2 = 6;

      String[] expectedArray = {"one", "two", "three"};
      String[] resultArray =  {"one", "two", "three"};

      //Check that two objects are equal
      assertEquals(str1, str2);

      //Check that a condition is true
      assertTrue (val1 < val2);

      //Check that a condition is false
      assertFalse(val1 > val2);

      //Check that an object isn't null
      assertNotNull(str1);

      //Check that an object is null
      assertNull(str3);

      //Check if two object references point to the same object
      assertSame(str4,str5);

      //Check if two object references not point to the same object
      assertNotSame(str1,str3);

      //Check whether two arrays are equal to each other.
      assertArrayEquals(expectedArray, resultArray);
   }
}

Tiếp theo, tạo một tệp lớp java có tên TestRunner.java trong C: \> JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner2 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestAssertions.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp Test case và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac TestAssertions.java TestRunner.java

Bây giờ chạy Test Runner, sẽ chạy trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra.

true

Chú thích

Chú thích giống như thẻ meta mà bạn có thể thêm vào mã của mình và áp dụng chúng cho các phương thức hoặc trong lớp. Các chú thích này trong JUnit cung cấp thông tin sau về các phương pháp kiểm tra -

  • phương thức nào sẽ chạy trước và sau phương pháp thử nghiệm.
  • phương thức nào chạy trước và sau tất cả các phương thức và.
  • phương thức hoặc lớp nào sẽ bị bỏ qua trong quá trình thực thi.

Bảng sau cung cấp danh sách các chú thích và ý nghĩa của chúng trong JUnit:

Sr.No. Chú thích & Mô tả
1

@Test

Chú thích Kiểm tra cho JUnit biết rằng phương thức public void mà nó được đính kèm có thể được chạy như một trường hợp kiểm tra.

2

@Before

Một số thử nghiệm cần các đối tượng tương tự được tạo trước khi chúng có thể chạy. Chú thích một phương thức trống công khai với @Before làm cho phương thức đó được chạy trước mỗi phương thức Kiểm tra.

3

@After

Nếu bạn phân bổ tài nguyên bên ngoài trong phương pháp Before, bạn cần giải phóng chúng sau khi chạy thử nghiệm. Chú thích phương thức trống công khai với @After khiến phương thức đó được chạy sau phương thức Kiểm tra.

4

@BeforeClass

Việc chú thích một phương thức void tĩnh công cộng với @BeforeClass khiến nó được chạy một lần trước bất kỳ phương thức kiểm tra nào trong lớp.

5

@AfterClass

Điều này sẽ thực hiện phương pháp sau khi tất cả các thử nghiệm kết thúc. Điều này có thể được sử dụng để thực hiện các hoạt động dọn dẹp.

6

@Ignore

Chú thích Bỏ qua được sử dụng để bỏ qua kiểm tra và kiểm tra đó sẽ không được thực hiện.

Tạo tệp lớp java có tên JunitAnnotation.java trong C: \> JUNIT_WORKSPACE để kiểm tra chú thích.

import org.junit.After;
import org.junit.AfterClass;

import org.junit.Before;
import org.junit.BeforeClass;

import org.junit.Ignore;
import org.junit.Test;

public class JunitAnnotation {
	
   //execute before class
   @BeforeClass
   public static void beforeClass() {
      System.out.println("in before class");
   }

   //execute after class
   @AfterClass
   public static void  afterClass() {
      System.out.println("in after class");
   }

   //execute before test
   @Before
   public void before() {
      System.out.println("in before");
   }
	
   //execute after test
   @After
   public void after() {
      System.out.println("in after");
   }
	
   //test case
   @Test
   public void test() {
      System.out.println("in test");
   }
	
   //test case ignore and will not execute
   @Ignore
   public void ignoreTest() {
      System.out.println("in ignore test");
   }
}

Tiếp theo, tạo một tệp lớp java có tên TestRunner.java trong C: \> JUNIT_WORKSPACE để thực thi các chú thích.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(JunitAnnotation.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp Test case và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac JunitAnnotation.java TestRunner.java

Bây giờ chạy Test Runner, sẽ chạy trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra.

in before class
in before
in test
in after
in after class
true

Chương này giải thích thủ tục thực thi của các phương thức trong JUnit, xác định thứ tự của các phương thức được gọi. Thảo luận bên dưới là quy trình thực thi của các phương thức API thử nghiệm JUnit với ví dụ.

Tạo tệp lớp java có tên ExecutionProcedureJunit.java trong C: \> JUNIT_WORKSPACE để kiểm tra chú thích.

import org.junit.After;
import org.junit.AfterClass;

import org.junit.Before;
import org.junit.BeforeClass;

import org.junit.Ignore;
import org.junit.Test;

public class ExecutionProcedureJunit {
	
   //execute only once, in the starting 
   @BeforeClass
   public static void beforeClass() {
      System.out.println("in before class");
   }

   //execute only once, in the end
   @AfterClass
   public static void  afterClass() {
      System.out.println("in after class");
   }

   //execute for each test, before executing test
   @Before
   public void before() {
      System.out.println("in before");
   }
	
   //execute for each test, after executing test
   @After
   public void after() {
      System.out.println("in after");
   }
	
   //test case 1
   @Test
   public void testCase1() {
      System.out.println("in test case 1");
   }

   //test case 2
   @Test
   public void testCase2() {
      System.out.println("in test case 2");
   }
}

Tiếp theo, tạo một tệp lớp java có tên TestRunner.java trong C: \> JUNIT_WORKSPACE để thực thi các chú thích.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(ExecutionProcedureJunit.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp Test case và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac ExecutionProcedureJunit.java TestRunner.java

Bây giờ chạy Test Runner, sẽ chạy trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra.

in before class
in before
in test case 1
in after
in before
in test case 2
in after
in after class

Xem kết quả ở trên. Quy trình thực hiện như sau:

  • Trước hết, phương thức beforeClass () chỉ thực thi một lần.
  • Phương thức afterClass () chỉ thực thi một lần.
  • Phương thức before () thực thi cho mỗi trường hợp thử nghiệm, nhưng trước khi thực thi trường hợp thử nghiệm.
  • Phương thức after () thực thi cho mỗi trường hợp thử nghiệm, nhưng sau khi thực thi trường hợp thử nghiệm.
  • Ở giữa before () và after (), mỗi trường hợp kiểm thử thực thi.

Các trường hợp thử nghiệm được thực thi bằng JUnitCorelớp học. JUnitCore là một mặt tiền để chạy các bài kiểm tra. Nó hỗ trợ chạy các bài kiểm tra JUnit 4, các bài kiểm tra JUnit 3.8.x và các hỗn hợp. Để chạy kiểm tra từ dòng lệnh, hãy chạy java org.junit.runner.JUnitCore <TestClass>. Đối với các lần chạy thử nghiệm một lần, hãy sử dụng phương thức tĩnh runClasses (Lớp []).

Sau đây là khai báo cho org.junit.runner.JUnitCore lớp học:

public class JUnitCore extends java.lang.Object

Ở đây chúng ta sẽ thấy cách thực hiện các bài kiểm tra với sự trợ giúp của JUnitCore.

Tạo một lớp học

Tạo một lớp java để được kiểm tra, giả sử, MessageUtil.java, trong C: \> JUNIT_WORKSPACE.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message;
   }
      
   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   
	
}

Tạo lớp trường hợp thử nghiệm

  • Tạo một lớp thử nghiệm java, chẳng hạn như TestJunit.java.

  • Thêm một phương pháp thử testPrintMessage () vào lớp thử nghiệm của bạn.

  • Thêm Annotaion @Test vào phương thức testPrintMessage ().

  • Triển khai điều kiện thử nghiệm và kiểm tra điều kiện bằng API khẳng định của JUnit.

Tạo tệp lớp java có tên TestJunit.java trong C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
	
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      assertEquals(message,messageUtil.printMessage());
   }
}

Tạo lớp chạy thử nghiệm

Bây giờ hãy tạo một tệp lớp java có tên TestRunner.javatrong C: \> JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm. Nó nhập lớp JUnitCore và sử dụng phương thức runClasses () lấy tên lớp thử nghiệm làm tham số của nó.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp Test case và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Bây giờ chạy Test Runner, sẽ chạy trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra.

Hello World
true

Test suiteđược sử dụng để nhóm một vài trường hợp thử nghiệm đơn vị và chạy chúng cùng nhau. Trong JUnit, cả hai@RunWith@Suitechú thích được sử dụng để chạy các bài kiểm tra bộ. Chương này lấy một ví dụ có hai lớp kiểm tra,TestJunit1 & TestJunit2, chạy cùng nhau bằng Test Suite.

Tạo một lớp học

Tạo một lớp java để được kiểm tra, giả sử, MessageUtil.java trong C: \> JUNIT_WORKSPACE.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

Tạo lớp trường hợp thử nghiệm

Tạo tệp lớp java có tên TestJunit1.java trong C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit1 {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");    
      assertEquals(message, messageUtil.printMessage());     
   }
}

Tạo tệp lớp java có tên TestJunit2.java trong C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit2 {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
 
   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Tạo lớp bộ thử nghiệm

  • Tạo một lớp java.
  • Đính kèm chú thích @RunWith (Suite.class) với lớp.
  • Thêm tham chiếu đến các lớp thử nghiệm JUnit bằng chú thích @ Suite.SuiteClasses.

Tạo tệp lớp java có tên TestSuite.java trong C: \> JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)

@Suite.SuiteClasses({
   TestJunit1.class,
   TestJunit2.class
})

public class JunitTestSuite {   
}

Tạo lớp chạy thử nghiệm

Tạo tệp lớp java có tên TestRunner.java trong C: \> JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(JunitTestSuite.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch tất cả các lớp java bằng javac.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit1.java 
TestJunit2.java JunitTestSuite.java TestRunner.java

Bây giờ chạy Test Runner, sẽ chạy trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra.

Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi Robert
true

Đôi khi nó xảy ra như vậy là mã của chúng tôi không hoàn toàn sẵn sàng trong khi chạy một trường hợp thử nghiệm. Kết quả là trường hợp thử nghiệm không thành công. Các@Ignore chú thích giúp trong trường hợp này.

  • Phương thức kiểm tra được chú thích bằng @Ignore sẽ không được thực thi.

  • Nếu một lớp kiểm tra được chú thích bằng @Ignore, thì sẽ không có phương thức kiểm tra nào được thực thi.

Bây giờ, hãy xem @Ignore hoạt động.

Tạo một lớp học

Tạo một lớp java để được kiểm tra, giả sử, MessageUtil.java trong C: \> JUNIT_WORKSPACE.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
	
}

Tạo lớp trường hợp thử nghiệm

  • Tạo một lớp thử nghiệm java, chẳng hạn như TestJunit.java.

  • Thêm một phương thức thử nghiệm testPrintMessage () hoặc testSalutationMessage () vào lớp thử nghiệm của bạn.

  • Thêm Annotaion @Ignore vào phương thức testPrintMessage ().

Tạo tệp lớp java có tên TestJunit.java trong C: \ JUNIT_WORKSPACE.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Ignore
   @Test
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = "Robert";
      assertEquals(message,messageUtil.printMessage());
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
	
}

Tạo lớp chạy thử nghiệm

Tạo tệp lớp java có tên TestRunner.java trong C: \> JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp MessageUtil, Test case và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Bây giờ chạy Test Runner, sẽ không chạy trường hợp thử nghiệm testPrintMessage () được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra. testPrintMessage () test case không được kiểm tra.

Inside testSalutationMessage()
Hi!Robert
true

Bây giờ, hãy cập nhật TestJunit trong C: \> JUNIT_WORKSPACE để bỏ qua tất cả các trường hợp thử nghiệm. Thêm @Ignore ở cấp lớp.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

@Ignore
public class TestJunit {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
     
   @Test
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = "Robert";
      assertEquals(message,messageUtil.printMessage());
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
	
}

Biên dịch test case bằng javac.

C:\JUNIT_WORKSPACE>javac TestJunit.java

Giữ nguyên Test Runner của bạn như sau:

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Bây giờ chạy Test Runner, sẽ không chạy bất kỳ trường hợp thử nghiệm nào được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra. Không có trường hợp thử nghiệm nào được kiểm tra.

true

JUnit cung cấp tùy chọn Timeout tiện dụng. Nếu một trường hợp thử nghiệm mất nhiều thời gian hơn số mili giây được chỉ định, thì JUnit sẽ tự động đánh dấu nó là không thành công. Cáctimeouttham số được sử dụng cùng với chú thích @Test. Hãy để chúng tôi xem @Test (thời gian chờ) đang hoạt động.

Tạo một lớp học

Tạo một lớp java để được kiểm tra, giả sử, MessageUtil.java trong C: \> JUNIT_WORKSPACE.

Thêm một vòng lặp while vô hạn bên trong phương thức printMessage ().

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public void printMessage(){
      System.out.println(message);
      while(true);
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

Tạo lớp trường hợp thử nghiệm

Tạo một lớp kiểm tra java, giả sử, TestJunit.java. Thêm khoảng thời gian chờ là 1000 vào trường hợp thử nghiệm testPrintMessage ().

Tạo tệp lớp java có tên TestJunit.java trong C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test(timeout = 1000)
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");     
      messageUtil.printMessage();     
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Tạo lớp chạy thử nghiệm

Tạo tệp lớp java có tên TestRunner.java trong C: \> JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp MessageUtil, Test case và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Bây giờ chạy Test Runner, sẽ chạy các trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra. testPrintMessage () test case sẽ đánh dấu việc kiểm thử đơn vị không thành công.

Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi!Robert
testPrintMessage(TestJunit): test timed out after 1000 milliseconds
false

JUnit cung cấp một tùy chọn theo dõi quá trình xử lý ngoại lệ của mã. Bạn có thể kiểm tra xem mã có ném một ngoại lệ mong muốn hay không. Cácexpectedtham số được sử dụng cùng với chú thích @Test. Hãy để chúng tôi xem @Test (dự kiến) đang hoạt động.

Tạo một lớp học

Tạo một lớp java để được kiểm tra, giả sử, MessageUtil.java trong C: \> JUNIT_WORKSPACE.

Thêm điều kiện lỗi bên trong phương thức printMessage ().

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public void printMessage(){
      System.out.println(message);
      int a = 0;
      int b = 1/a;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

Tạo lớp trường hợp thử nghiệm

Tạo một lớp thử nghiệm java được gọi là TestJunit.java. Thêm một ngoại lệ dự kiến ​​ArithmeticException vào trường hợp thử nghiệm testPrintMessage ().

Tạo tệp lớp java có tên TestJunit.java trong C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test(expected = ArithmeticException.class)
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");     
      messageUtil.printMessage();     
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Tạo lớp chạy thử nghiệm

Tạo tệp lớp java có tên TestRunner.java trong C: \> JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestJunit.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp MessageUtil, Test case và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java

Bây giờ chạy Test Runner, sẽ chạy các trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra. testPrintMessage () test case sẽ được thông qua.

Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi!Robert
true

JUnit 4 đã giới thiệu một tính năng mới có tên là parameterized tests. Các bài kiểm tra tham số hóa cho phép một nhà phát triển chạy đi chạy lại cùng một bài kiểm tra bằng cách sử dụng các giá trị khác nhau. Có năm bước mà bạn cần làm theo để tạo kiểm tra tham số hóa.

  • Chú thích lớp thử nghiệm với @RunWith (Parameterized.class).

  • Tạo một phương thức tĩnh công khai được chú thích bằng @Parameters trả về Bộ sưu tập các đối tượng (dưới dạng Mảng) dưới dạng tập dữ liệu thử nghiệm.

  • Tạo một phương thức khởi tạo công khai nhận những gì tương đương với một "hàng" dữ liệu thử nghiệm.

  • Tạo một biến phiên bản cho mỗi "cột" của dữ liệu thử nghiệm.

  • Tạo (các) trường hợp thử nghiệm của bạn bằng cách sử dụng các biến phiên bản làm nguồn dữ liệu thử nghiệm.

Trường hợp thử nghiệm sẽ được gọi một lần cho mỗi hàng dữ liệu. Hãy để chúng tôi xem các thử nghiệm tham số hóa đang hoạt động.

Tạo một lớp học

Tạo một lớp java để được kiểm tra, giả sử, PrimeNumberChecker.java trong C: \> JUNIT_WORKSPACE.

public class PrimeNumberChecker {
   public Boolean validate(final Integer primeNumber) {
      for (int i = 2; i < (primeNumber / 2); i++) {
         if (primeNumber % i == 0) {
            return false;
         }
      }
      return true;
   }
}

Tạo lớp trường hợp thử nghiệm được tham số hóa

Tạo một lớp kiểm tra java, giả sử, PrimeNumberCheckerTest.java. Tạo tệp lớp java có tênPrimeNumberCheckerTest.java trong C: \> JUNIT_WORKSPACE.

import java.util.Arrays;
import java.util.Collection;
 
import org.junit.Test;
import org.junit.Before;

import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;

@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {
   private Integer inputNumber;
   private Boolean expectedResult;
   private PrimeNumberChecker primeNumberChecker;

   @Before
   public void initialize() {
      primeNumberChecker = new PrimeNumberChecker();
   }

   // Each parameter should be placed as an argument here
   // Every time runner triggers, it will pass the arguments
   // from parameters we defined in primeNumbers() method
	
   public PrimeNumberCheckerTest(Integer inputNumber, Boolean expectedResult) {
      this.inputNumber = inputNumber;
      this.expectedResult = expectedResult;
   }

   @Parameterized.Parameters
   public static Collection primeNumbers() {
      return Arrays.asList(new Object[][] {
         { 2, true },
         { 6, false },
         { 19, true },
         { 22, false },
         { 23, true }
      });
   }

   // This test will run 4 times since we have 5 parameters defined
   @Test
   public void testPrimeNumberChecker() {
      System.out.println("Parameterized Number is : " + inputNumber);
      assertEquals(expectedResult, 
      primeNumberChecker.validate(inputNumber));
   }
}

Tạo lớp chạy thử nghiệm

Tạo tệp lớp java có tên TestRunner.java trong C: \> JUNIT_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(PrimeNumberCheckerTest.class);

      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Biên dịch các lớp PrimeNumberChecker, PrimeNumberCheckerTest và Test Runner bằng javac.

C:\JUNIT_WORKSPACE>javac PrimeNumberChecker.java PrimeNumberCheckerTest.java
TestRunner.java

Bây giờ chạy Test Runner, sẽ chạy các trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.

C:\JUNIT_WORKSPACE>java TestRunner

Xác minh kết quả đầu ra.

Parameterized Number is : 2
Parameterized Number is : 6
Parameterized Number is : 19
Parameterized Number is : 22
Parameterized Number is : 23
true

Chúng tôi sẽ có một ví dụ để chứng minh cách chạy JUnit bằng ANT. Làm theo các bước dưới đây.

Bước 1: Tải xuống Apache Ant

Tải xuống Apache Ant dựa trên hệ điều hành bạn đang làm việc.

Hệ điều hành Tên lưu trữ
các cửa sổ apache-ant-1.8.4-bin.zip
Linux apache-ant-1.8.4-bin.tar.gz
Mac apache-ant-1.8.4-bin.tar.gz

Bước 2: Đặt Môi trường Kiến

Đặt ANT_HOMEbiến môi trường để trỏ đến vị trí thư mục cơ sở, nơi các thư viện ANT được lưu trữ trên máy của bạn. Giả sử các thư viện Ant được lưu trữ trong thư mục apache-ant-1.8.4.

Sr.No. Hệ điều hành & Mô tả
1

Windows

Đặt biến môi trường ANT_HOME thành C: \ Program Files \ Apache Software Foundation \ apache-ant-1.8.4

2

Linux

xuất ANT_HOME = /usr/local/apache-ant-1.8.4

3

Mac

xuất ANT_HOME = /Library/apache-ant-1.8.4

Nối vị trí trình biên dịch Ant vào Đường dẫn Hệ thống như sau:

Hệ điều hành Đầu ra
các cửa sổ Nối chuỗi %ANT_HOME\bin ở cuối biến hệ thống, Path.
Linux xuất PATH = $PATH:$ANT_HOME / bin /
Mac không yêu cầu

Bước 3: Tải xuống JUnit Archive

Tải xuống Kho lưu trữ JUnit phù hợp với hệ điều hành của bạn.

Hệ điều hành Tên lưu trữ
các cửa sổ junit4.10.jar
Linux junit4.10.jar
Mac junit4.10.jar

Bước 4: Tạo cấu trúc dự án

  • Tạo một thư mục TestJunitWithAnt trong C: \> JUNIT_WORKSPACE.

  • Tạo một thư mục src trong C: \> JUNIT_WORKSPACE> TestJunitWithAnt.

  • Tạo một thư mục test trong C: \> JUNIT_WORKSPACE> TestJunitWithAnt.

  • Tạo một thư mục lib trong C: \> JUNIT_WORKSPACE> TestJunitWithAnt.

  • Tạo nên MessageUtil trong C: \> JUNIT_WORKSPACE> TestJunitWithAnt> srcfolder.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}

Tạo nên TestMessageUtil lớp trong thư mục C: \> JUNIT_WORKSPACE> TestJunitWithAnt> src.

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestMessageUtil {

   String message = "Robert";	
   MessageUtil messageUtil = new MessageUtil(message);
   
   @Test
   public void testPrintMessage() {	
      System.out.println("Inside testPrintMessage()");     
      assertEquals(message,messageUtil.printMessage());
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

Sao chép junit-4.10.jar vào thư mục C: \> JUNIT_WORKSPACE> TestJunitWithAnt> lib.

Tạo ANT Build.xml

Chúng tôi sẽ sử dụng <junit> nhiệm vụ trong Ant để thực thi các trường hợp thử nghiệm JUnit của chúng tôi.

<project name = "JunitTest" default = "test" basedir = ".">
   <property name = "testdir" location = "test" />
   <property name = "srcdir" location = "src" />
   <property name = "full-compile" value = "true" />
	
   <path id = "classpath.base"/>
	
   <path id = "classpath.test">
      <pathelement location = "lib/junit-4.10.jar" />
      <pathelement location = "${testdir}" /> <pathelement location = "${srcdir}" />
      <path refid = "classpath.base" />
   </path>
	
   <target name = "clean" >
      <delete verbose = "${full-compile}"> <fileset dir = "${testdir}" includes = "**/*.class" />
      </delete>
   </target>
	
   <target name = "compile" depends = "clean">
      <javac srcdir = "${srcdir}" destdir = "${testdir}" 
         verbose = "${full-compile}">
         <classpath refid = "classpath.test"/>
      </javac>
   </target>
	
   <target name = "test" depends = "compile">
      <junit>
         <classpath refid = "classpath.test" />
         <formatter type = "brief" usefile = "false" />
         <test name = "TestMessageUtil" />
      </junit>
   </target>
	
</project>

Chạy lệnh Ant sau đây.

C:\JUNIT_WORKSPACE\TestJunitWithAnt>ant

Xác minh kết quả đầu ra.

Buildfile: C:\JUNIT_WORKSPACE\TestJunitWithAnt\build.xml

clean:  

compile:  
   [javac] Compiling 2 source files to C:\JUNIT_WORKSPACE\TestJunitWithAnt\test
   [javac] [parsing started C:\JUNIT_WORKSPACE\TestJunitWithAnt\src\
      MessageUtil.java]
   [javac] [parsing completed 18ms]
   [javac] [parsing started C:\JUNIT_WORKSPACE\TestJunitWithAnt\src\
      TestMessageUtil.java]
   [javac] [parsing completed 2ms]
   [javac] [search path for source files: C:\JUNIT_WORKSPACE\
      TestJunitWithAnt\src]    
   [javac] [loading java\lang\Object.class(java\lang:Object.class)]
   [javac] [loading java\lang\String.class(java\lang:String.class)]
   [javac] [loading org\junit\Test.class(org\junit:Test.class)]
   [javac] [loading org\junit\Ignore.class(org\junit:Ignore.class)]
   [javac] [loading org\junit\Assert.class(org\junit:Assert.class)]
   [javac] [loading java\lang\annotation\Retention.class
      (java\lang\annotation:Retention.class)]
   [javac] [loading java\lang\annotation\RetentionPolicy.class
      (java\lang\annotation:RetentionPolicy.class)]
   [javac] [loading java\lang\annotation\Target.class
      (java\lang\annotation:Target.class)]
   [javac] [loading java\lang\annotation\ElementType.class
      (java\lang\annotation:ElementType.class)]
   [javac] [loading java\lang\annotation\Annotation.class
      (java\lang\annotation:Annotation.class)]
   [javac] [checking MessageUtil]
   [javac] [loading java\lang\System.class(java\lang:System.class)]
   [javac] [loading java\io\PrintStream.class(java\io:PrintStream.class)]
   [javac] [loading java\io\FilterOutputStream.class
      (java\io:FilterOutputStream.class)]
   [javac] [loading java\io\OutputStream.class(java\io:OutputStream.class)]
   [javac] [loading java\lang\StringBuilder.class
      (java\lang:StringBuilder.class)]
   [javac] [loading java\lang\AbstractStringBuilder.class
      (java\lang:AbstractStringBuilder.class)]
   [javac] [loading java\lang\CharSequence.class(java\lang:CharSequence.class)]
   [javac] [loading java\io\Serializable.class(java\io:Serializable.class)]
   [javac] [loading java\lang\Comparable.class(java\lang:Comparable.class)]
   [javac] [loading java\lang\StringBuffer.class(java\lang:StringBuffer.class)]
   [javac] [wrote C:\JUNIT_WORKSPACE\TestJunitWithAnt\test\MessageUtil.class]
   [javac] [checking TestMessageUtil]
   [javac] [wrote C:\JUNIT_WORKSPACE\TestJunitWithAnt\test\TestMessageUtil.class]
   [javac] [total 281ms]

test:
    [junit] Testsuite: TestMessageUtil
    [junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.008 sec
    [junit]
    [junit] ------------- Standard Output ---------------
    [junit] Inside testPrintMessage()
    [junit] Robert
    [junit] Inside testSalutationMessage()
    [junit] Hi!Robert
    [junit] ------------- ---------------- ---------------

BUILD SUCCESSFUL
Total time: 0 seconds

Để thiết lập JUnit với eclipse, hãy làm theo các bước dưới đây.

Bước 1: Tải xuống JUnit Archive

Tải xuống một jar JUnit dựa trên hệ điều hành bạn có trên hệ thống của mình.

Hệ điều hành Tên lưu trữ
các cửa sổ junit4.10.jar
Linux junit4.10.jar
Mac junit4.10.jar

Giả sử bạn đã sao chép tệp JAR ở trên vào thư mục C: \> JUnit.

Bước 2: Đặt Môi trường Eclipse

Mở eclipse → nhấp chuột phải vào dự án và nhấp vào thuộc tính> Đường dẫn xây dựng> Định cấu hình Đường dẫn xây dựng và thêm junit-4.10.jar trong các thư viện bằng cách sử dụng nút Thêm Bình ngoài.

Chúng tôi giả định rằng Eclipse của bạn có plugin JUnit có sẵn. Nếu nó không có sẵn trong thư mục C: \> eclipse \ plugins, thì bạn có thể tải xuống từJUnit Plugin. Giải nén tệp zip đã tải xuống trong thư mục plugin của Eclipse. Cuối cùng khởi động lại Eclipse.

Bây giờ Eclipse của bạn đã sẵn sàng cho việc phát triển các trường hợp thử nghiệm JUnit.

Bước 3: Xác minh cài đặt JUnit trong Eclipse

Tạo một dự án TestJunittrong Eclipse tại bất kỳ vị trí nào. Sau đó, tạo một lớp họcMessageUtil để thử nghiệm trong dự án.

/*
* This class prints the given message on console.
*/

public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message;
   }
      
   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   
}

Tạo một lớp thử nghiệm TestJunit Trong dự án.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestJunit {
	
   String message = "Hello World";	
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {	  
      assertEquals(message,messageUtil.printMessage());
   }
}

Sau đây là cấu trúc dự án -

Cuối cùng, nhấp chuột phải vào chương trình và chạy dưới dạng JUnit để xác minh đầu ra của chương trình.

Xác minh kết quả.

Sau đây là các phần mở rộng JUnit -

  • Cactus
  • JWebUnit
  • XMLUnit
  • MockObject

cây xương rồng

Cactus là một khung thử nghiệm đơn giản để kiểm tra đơn vị mã java phía máy chủ (Servlets, EJBs, Tag Libs, Filters). Mục đích của Cactus là giảm chi phí viết thử nghiệm cho mã phía máy chủ. Nó sử dụng JUnit và mở rộng nó. Cactus thực hiện chiến lược trong vùng chứa để thực hiện các bài kiểm tra bên trong vùng chứa.

Hệ sinh thái xương rồng được tạo thành từ một số thành phần:

  • Cactus Frameworklà trái tim của Xương rồng. Nó là công cụ cung cấp API để viết các bài kiểm tra Cactus.

  • Cactus Integration Modules là giao diện người dùng và khuôn khổ cung cấp các cách dễ dàng để sử dụng Khung xương rồng (tập lệnh Ant, plugin Eclipse và plugin Maven).

Đoạn mã sau minh họa cách sử dụng Cactus.

import org.apache.cactus.*;
import junit.framework.*;

public class TestSampleServlet extends ServletTestCase {
   @Test
   public void testServlet() {
      // Initialize class to test
      SampleServlet servlet = new SampleServlet();

      // Set a variable in session as the doSomething()
      // method that we are testing 
      session.setAttribute("name", "value");

      // Call the method to test, passing an 
      // HttpServletRequest object (for example)
      String result = servlet.doSomething(request);

      // Perform verification that test was successful
      assertEquals("something", result);
      assertEquals("otherValue", session.getAttribute("otherName"));
   }
}

JWebUnit

JWebUnit là một khung thử nghiệm dựa trên Java cho các ứng dụng web. Nó bao bọc các khuôn khổ thử nghiệm hiện có như HtmlUnit và Selenium bằng một giao diện thử nghiệm đơn giản, thống nhất để kiểm tra tính đúng đắn của các ứng dụng web của bạn.

JWebUnit cung cấp một API Java cấp cao để điều hướng ứng dụng web kết hợp với một tập hợp các xác nhận để xác minh tính đúng đắn của ứng dụng. Điều này bao gồm điều hướng thông qua liên kết, nhập và gửi biểu mẫu, xác nhận nội dung bảng và các tính năng ứng dụng web kinh doanh điển hình khác.

Các phương pháp điều hướng đơn giản và xác nhận sẵn sàng sử dụng cho phép tạo thử nghiệm nhanh hơn so với chỉ sử dụng JUnit hoặc HtmlUnit. Và nếu bạn muốn chuyển từ HtmlUnit sang các plugin khác như Selenium (có sẵn sớm), bạn không cần phải viết lại các bài kiểm tra của mình.

Đây là một mã mẫu.

import junit.framework.TestCase;
import net.sourceforge.jwebunit.WebTester;

public class ExampleWebTestCase extends TestCase {
   private WebTester tester;
   
   public ExampleWebTestCase(String name) {
      super(name);
      tester = new WebTester();
   }
	
   //set base url
   public void setUp() throws Exception {
      getTestContext().setBaseUrl("http://myserver:8080/myapp");
   }
	
   // test base info
   @Test
   public void testInfoPage() {
      beginAt("/info.html");
   }
}

XMLUnit

XMLUnit cung cấp một lớp mở rộng JUnit duy nhất, XMLTestCase, và một tập hợp các lớp hỗ trợ cho phép xác nhận về:

  • Sự khác biệt giữa hai phần XML (thông qua các lớp Diff và Chi tiết).

  • Tính hợp lệ của một đoạn XML (thông qua lớp Validator).

  • Kết quả của việc chuyển đổi một đoạn XML bằng XSLT (thông qua lớp Transform).

  • Việc đánh giá một biểu thức XPath trên một đoạn XML (thông qua các lớp triển khai giao diện XpathEngine).

  • Các nút riêng lẻ trong một đoạn XML được hiển thị bởi DOM Traversal (thông qua lớp NodeTest).

Giả sử chúng tôi có hai phần XML mà chúng tôi muốn so sánh và khẳng định rằng chúng bằng nhau. Chúng ta có thể viết một lớp kiểm tra đơn giản như thế này -

import org.custommonkey.xmlunit.XMLTestCase;

public class MyXMLTestCase extends XMLTestCase {

   // this test method compare two pieces of the XML
   @Test
   public void testForXMLEquality() throws Exception {
      String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>";
      String myTestXML = "<msg><localId>2376</localId></msg>";
      assertXMLEqual("Comparing test xml to control xml", myControlXML, myTestXML);
   }
}

MockObject

Trong bài kiểm tra đơn vị, các đối tượng giả có thể mô phỏng hành vi của các đối tượng phức tạp, thực (không phải giả) và do đó rất hữu ích khi một đối tượng thực không thực tế hoặc không thể kết hợp vào bài kiểm tra đơn vị.

Phong cách mã hóa phổ biến để thử nghiệm với các đối tượng giả là:

  • Tạo các thể hiện của các đối tượng giả.
  • Đặt trạng thái và kỳ vọng trong các đối tượng giả.
  • Gọi mã miền với các đối tượng giả làm tham số.
  • Xác minh tính nhất quán trong các đối tượng giả.

Dưới đây là một ví dụ về MockObject sử dụng Jmock.

import org.jmock.Mockery;
import org.jmock.Expectations;

class PubTest extends TestCase {
   Mockery context = new Mockery();
   public void testSubReceivesMessage() {
      // set up
      final Sub sub = context.mock(Sub.class);

      Pub pub = new Pub();
      pub.add(sub);
    
      final String message = "message";
      
      // expectations
      context.checking(new Expectations() {
         oneOf (sub).receive(message);
      });

      // execute
      pub.publish(message);
      
      // verify
      context.assertIsSatisfied();
   }
}