Junit Assert & AssertEquals với ví dụ

⚡ Tóm tắt thông minh

JUnit Các phương thức `Assert` và `AssertEquals` xác định trạng thái thành công hay thất bại của một trường hợp kiểm thử bằng cách so sánh giá trị mong đợi và giá trị thực tế. Tài liệu này giải thích các phương thức `assert` được cung cấp bởi `org.junit.Assert`, bao gồm các khẳng định kiểu boolean, null, đồng nhất, bằng nhau và mảng, với một ví dụ hoạt động hoàn chỉnh.

  • Mục đích: Các phương thức Assert từ org.junit.Assert xác minh các điều kiện và phát hiện lỗi kiểm thử.
  • 🔢 Các loại phương pháp: Các khẳng định kiểu Boolean, null, identical, equals, array-equals và fail-message bao gồm các kiểm tra thông thường.
  • 🟰 assertEquals: So sánh các giá trị bằng phương thức equals(), bao bọc.ping Chuyển đổi các đối tượng cơ bản thành đối tượng trước.
  • 🔬 Điểm nổi: Cần có dung sai delta khi so sánh các giá trị float hoặc double.
  • 🧪 Ví dụ: Một lớp kiểm thử và trình chạy thử nghiệm minh họa mọi câu lệnh khẳng định quan trọng đều trả về giá trị true.

JUnit Assert và AssertEquals

Khẳng định Junit là gì?

Phương thức `assert` rất hữu ích trong việc xác định trạng thái Đạt (Pass) hay Thất bại (Fail) của một trường hợp kiểm thử. Các phương thức `assert` được cung cấp bởi lớp `org.junit.Assert`, lớp này kế thừa từ lớp `java.lang.Object`.

Có nhiều loại khẳng định khác nhau, chẳng hạn như Boolean, Null, Identical, v.v.

JUnit Cung cấp một lớp có tên là Assert, lớp này cung cấp một loạt các phương thức khẳng định hữu ích trong việc viết các trường hợp kiểm thử và phát hiện lỗi kiểm thử.

Các phương thức khẳng định được cung cấp bởi lớp org.junit.Khẳng định, mở rộng java.lang.Object lớp học.

JUnit Khẳng định phương pháp

Boolean

Nếu bạn muốn kiểm tra các điều kiện boolean (đúng hoặc sai), bạn có thể sử dụng các phương thức assert sau:

  1. khẳng định Đúng(điều kiện)
  2. khẳng địnhFalse(điều kiện)

Ở đây điều kiện là một giá trị boolean.

Đối tượng rỗng

Nếu bạn muốn kiểm tra giá trị ban đầu của một đối tượng/biến, bạn có các phương pháp sau:

  1. khẳng địnhNull(đối tượng)
  2. khẳng địnhNotNull(đối tượng)

Ở đây đối tượng là một Java vật, ví dụ khẳng địnhNull(thực tế);

Đồng nhất

Nếu bạn muốn kiểm tra xem các đối tượng có giống hệt nhau hay không (tức là so sánh hai tham chiếu đến cùng một đối tượng). Java đối tượng) hoặc khác nhau:

  1. assertSame(expected, actual) — Nó sẽ trả về true nếu dự kiến ​​== thực tế.
  2. khẳng địnhNotSame(dự kiến, thực tế)

Khẳng định bằng

Nếu bạn muốn kiểm tra sự bằng nhau của hai đối tượng, bạn có thể sử dụng phương pháp sau:

  • khẳng địnhEquals(dự kiến, thực tế)

Nó sẽ trả về true nếu expected.equals(actual) trả về true.

Khẳng định mảng bằng

Nếu bạn muốn kiểm tra sự bằng nhau của các mảng, bạn có thể sử dụng phương pháp sau:

  • khẳng địnhArrayEquals(dự kiến, thực tế)

Phương pháp trên phải được sử dụng nếu các mảng có cùng độ dài. Đối với mỗi giá trị hợp lệ cho i, bạn có thể kiểm tra nó như dưới đây:

  • assertEquals(expected[i], actual[i])
  • assertArrayEquals(expected[i], actual[i])

Thông báo lỗi

Nếu bạn muốn đưa ra bất kỳ lỗi xác nhận nào, bạn có Thất bại()Điều này luôn dẫn đến kết quả trượt.

  • thất bại(thông báo);

Bạn có thể có một phương thức khẳng định với một phần bổ sung. Chuỗi tham số là tham số đầu tiên. Chuỗi này sẽ được thêm vào thông báo lỗi nếu điều kiện xác nhận thất bại. Ví dụ: thất bại (thông báo) có thể được viết như:

  • assertEquals(message, expected, actual)

JUnit khẳng định

Bạn có assertEquals(a, b), dựa vào bằng () phương thức của lớp Object.

  • Ở đây nó sẽ được đánh giá là a.bằng(b).
  • Ở đây, lớp được kiểm tra được sử dụng để xác định mối quan hệ đẳng thức phù hợp.
  • Nếu một lớp không ghi đè bằng () phương pháp của Đối tượng lớp đó sẽ có hành vi mặc định của nó. bằng () phương pháp, tức là định danh đối tượng.

If ab là những người nguyên thủy như byte, int, boolean, vân vân, sau đó các bước sau sẽ được thực hiện cho assertEquals(a, b):

ab sẽ được chuyển đổi thành loại đối tượng trình bao bọc tương đương của chúng (Byte, Số nguyên, Boolean, v.v.), và sau đó a.bằng(b) sẽ được đánh giá.

Ví dụ, hãy xem xét các chuỗi được đề cập bên dưới có cùng giá trị; chúng ta hãy kiểm tra điều này bằng cách sử dụng assertEquals:

String obj1 = "Junit";
String obj2 = "Junit";
assertEquals(obj1, obj2);

Câu lệnh assert ở trên sẽ trả về true vì obj1.equals(obj2) trả về true.

Xác nhận dấu phẩy động

Khi bạn muốn so sánh các kiểu dữ liệu dấu phẩy động (ví dụ: tăng gấp đôi or phao), bạn cần thêm một tham số bắt buộc nữa. đồng bằngđể tránh các vấn đề về sai số làm tròn khi thực hiện so sánh số thực.

Khẳng định đánh giá như được đưa ra dưới đây:

  • Math.abs(expected – actual) <= delta

Ví dụ:

assertEquals(aDoubleGiá trị, khácDoubleGiá trị, 0.001)

JUnit Khẳng định ví dụ

Ví dụ dưới đây minh họa cách khẳng định một điều kiện bằng cách sử dụng JUnit khẳng định các phương pháp

Chúng ta hãy tạo một lớp kiểm thử đơn giản có tên là... Junit4AssertionTest.java và một lớp chạy thử nghiệm TestRunner.java.

Bạn sẽ tạo một vài biến và các câu lệnh khẳng định quan trọng trong JUnit.

Trong ví dụ này, bạn sẽ thực thi lớp kiểm thử của chúng ta bằng cách sử dụng TestRunner.java.

Bước 1) Chúng ta hãy tạo một lớp bao gồm tất cả các phương thức quan trọng của câu lệnh assert trong JUnit:

Junit4AssertionTest.java

package guru99.junit;

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

public class Junit4AssertionTest {

    @Test
    public void testAssert() {

        // Variable declaration
        String string1 = "Junit";
        String string2 = "Junit";
        String string3 = "test";
        String string4 = "test";
        String string5 = null;
        int variable1 = 1;
        int variable2 = 2;
        int[] airethematicArrary1 = { 1, 2, 3 };
        int[] airethematicArrary2 = { 1, 2, 3 };

        // Assert statements
        assertEquals(string1, string2);
        assertSame(string3, string4);
        assertNotSame(string1, string3);
        assertNotNull(string1);
        assertNull(string5);
        assertTrue(variable1 < variable2);
        assertArrayEquals(airethematicArrary1, airethematicArrary2);
    }
}

Bước 2) Bạn cần tạo một lớp chạy thử nghiệm để thực thi lớp trên:

TestRunner.java

package guru99.junit;

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(Junit4AssertionTest.class);
        for (Failure failure : result.getFailures()) {
            System.out.println(failure.toString());
        }
        System.out.println("Result==" + result.wasSuccessful());
    }
}

Bước 3) Chúng ta hãy phân tích kết quả mong đợi từng bước một. Hãy xem xét từng câu lệnh assert một:

  1. assertEquals(string1, string2);

Bây giờ hãy so sánh chuỗi 1=”Junit” với chuỗi 2=”Junit” bằng phương thức equals của lớp Object. Thay thế phương thức assertEquals bằng phương thức java.lang.Object.equals():

string1.equals(string2) => trả về true

Vì vậy, assertEquals(string1, string2) sẽ trả về đúng.

  1. khẳng địnhSame(string3, string4);

Chức năng “assertSame()” dùng để kiểm tra xem hai đối tượng có tham chiếu đến cùng một đối tượng hay không. Vì string3=”test” và string4=”test”, nên cả string3 và string4 đều cùng kiểu dữ liệu, do đó assertSame(string3, string4) sẽ trả về true. đúng.

  1. khẳng địnhNotSame(string1, string3);

Chức năng “assertNotSame()” dùng để kiểm tra xem hai đối tượng có tham chiếu đến cùng một đối tượng hay không. Vì string1=”Junit” và string3=”test”, nên cả string1 và string3 đều thuộc các kiểu dữ liệu khác nhau, do đó assertNotSame(string1, string3) sẽ trả về false. đúng.

  1. khẳng địnhNotNull(string1);

Chức năng “assertNotNull()” dùng để kiểm tra xem một đối tượng có phải là null hay không. Vì string1=”Junit”, là một giá trị không null, nên assertNotNull(string1) sẽ trả về null. đúng.

  1. khẳng địnhNull(string5);

Chức năng “assertNull()” dùng để kiểm tra xem một đối tượng có phải là null hay không. Vì string5=null, là một giá trị null, nên assertNull(string5) sẽ trả về null. đúng.

  1. assertTrue(variable1 < variable2);

Chức năng “assertTrue()” dùng để kiểm tra xem một điều kiện có đúng hay không. Vì variable1=1 và variable2=2, điều này cho thấy điều kiện variable1 < variable2 là đúng, nên assertTrue(variable1 < variable2) sẽ trả về true. đúng.

  1. khẳng địnhArrayEquals(airthematicArrary1, airethematicArrary2);

Hàm “assertArrayEquals()” dùng để kiểm tra xem mảng mong đợi và mảng kết quả có bằng nhau hay không. Kiểu dữ liệu của mảng có thể là int, long, short, char, byte hoặc java.lang.Object. Vì airethematicArrary1 = { 1, 2, 3 } và airethematicArrary2 = { 1, 2, 3 }, cho thấy cả hai mảng đều bằng nhau, nên assertArrayEquals(airethematicArrary1, airethematicArrary2) sẽ trả về false. đúng.

Vì tất cả bảy câu lệnh khẳng định của Junit4AssertionTest.java Khi bạn thực thi lớp kiểm thử assert, kết quả trả về sẽ là true (xem kết quả bên dưới).

Bước 4) Nhấp chuột phải vào Junit4AssertionTest.java và chọn Run As -> JUnit. Bạn sẽ thấy đầu ra như dưới đây:

JUnit Khẳng định ví dụ

Kết quả trên cho thấy bài kiểm tra đã thành công như mong đợi.

Câu Hỏi Thường Gặp

Đúng vậy. Trợ lý AI có thể tạo ra các câu lệnh assertEquals, assertTrue và các câu lệnh khẳng định khác dựa trên hành vi dự kiến ​​của một phương thức. Tuy nhiên, bạn vẫn nên xem xét lại các giá trị dự kiến ​​và các trường hợp ngoại lệ để đảm bảo các bài kiểm tra có ý nghĩa.

Đúng vậy. AI có thể đề xuất sử dụng `assertEquals` thay vì `assertSame` hoặc `assertArrayEquals` dựa trên những gì bạn đang so sánh. Điều này giúp giảm thiểu các lỗi thường gặp, chẳng hạn như kiểm tra tham chiếu khi bạn muốn so sánh giá trị.

`assertEquals` kiểm tra sự bằng nhau về giá trị bằng cách sử dụng phương thức `equals()`. `assertSame` kiểm tra xem hai tham chiếu có trỏ đến cùng một đối tượng trong bộ nhớ hay không. Hai đối tượng có giá trị bằng nhau vẫn có thể không vượt qua được `assertSame`.

Khi một khẳng định thất bại, JUnit Hàm này sẽ ném ra một AssertionError, đánh dấu bài kiểm tra là thất bại và báo cáo thông báo tùy chọn cùng với các giá trị dự kiến ​​và thực tế để giúp bạn gỡ lỗi bài kiểm tra.

Tóm tắt bài viết này với: