unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Unit Test

Unit Test #

Unit testing adalah metode pengujian perangkat lunak di mana unit terkecil dari kode, biasanya sebuah metode atau fungsi, diuji untuk memastikan bahwa ia berfungsi sebagaimana mestinya. Di Java, unit testing umumnya dilakukan menggunakan pustaka seperti JUnit dan TestNG. JUnit adalah salah satu pustaka paling populer untuk unit testing di Java dan menyediakan berbagai fitur untuk menulis dan menjalankan tes.

JUnit #

JUnit adalah framework testing untuk Java yang memungkinkan pengembang menulis dan menjalankan tes unit secara otomatis.

Menambahkan Dependensi #

Untuk menggunakan JUnit, Anda perlu menambahkan dependensi ke dalam file build Anda.

Gradle:

testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'

Maven:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>

Contoh Kelas yang Diuji:

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public int subtract(int a, int b) {
        return a - b;
    }
}

Contoh Tes Unit dengan JUnit:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class CalculatorTest {

    @Test
    void testAdd() {
        Calculator calculator = new Calculator();
        assertEquals(5, calculator.add(2, 3), "2 + 3 should equal 5");
    }

    @Test
    void testSubtract() {
        Calculator calculator = new Calculator();
        assertEquals(1, calculator.subtract(3, 2), "3 - 2 should equal 1");
    }
}

Penjelasan:

  • @Test: Menandai metode sebagai metode tes.
  • assertEquals(expected, actual, message): Memeriksa apakah nilai yang diharapkan sama dengan nilai aktual yang dihasilkan oleh metode yang diuji.

Lifecycle Test #

JUnit menyediakan anotasi untuk mengelola siklus hidup tes, seperti:

  • @BeforeAll: Menjalankan kode sebelum semua tes dalam kelas dijalankan.
  • @BeforeEach: Menjalankan kode sebelum setiap tes.
  • @AfterEach: Menjalankan kode setelah setiap tes.
  • @AfterAll: Menjalankan kode setelah semua tes dalam kelas dijalankan.

Contoh:

import org.junit.jupiter.api.*;

public class CalculatorTest {
    private Calculator calculator;

    @BeforeAll
    static void setupBeforeAll() {
        System.out.println("Setup before all tests");
    }

    @BeforeEach
    void setupBeforeEach() {
        calculator = new Calculator();
        System.out.println("Setup before each test");
    }

    @Test
    void testAdd() {
        assertEquals(5, calculator.add(2, 3));
    }

    @Test
    void testSubtract() {
        assertEquals(1, calculator.subtract(3, 2));
    }

    @AfterEach
    void teardownAfterEach() {
        System.out.println("Teardown after each test");
    }

    @AfterAll
    static void teardownAfterAll() {
        System.out.println("Teardown after all tests");
    }
}

TestNG #

TestNG adalah framework testing lain yang sering digunakan sebagai alternatif JUnit. Ia menyediakan fitur tambahan seperti testing paralel, dependensi antar tes, dan lebih banyak kontrol atas konfigurasi tes.

Menambahkan Dependensi #

Gradle:

testImplementation 'org.testng:testng:7.4.0'

Maven:

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.4.0</version>
    <scope>test</scope>
</dependency>

Contoh Tes dengan TestNG:

import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class CalculatorTest {
    private Calculator calculator;

    @BeforeClass
    public void setup() {
        calculator = new Calculator();
    }

    @Test
    public void testAdd() {
        Assert.assertEquals(calculator.add(2, 3), 5, "2 + 3 should equal 5");
    }

    @Test
    public void testSubtract() {
        Assert.assertEquals(calculator.subtract(3, 2), 1, "3 - 2 should equal 1");
    }
}

Mocking Unit Test #

Untuk pengujian yang melibatkan dependensi atau layanan eksternal, Anda bisa menggunakan pustaka mocking seperti Mockito untuk mensimulasikan perilaku dependensi.

Contoh:

import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.mockito.Mockito.*;

public class ServiceTest {

    @Test
    void testServiceMethod() {
        Dependency mockDependency = Mockito.mock(Dependency.class);
        when(mockDependency.getData()).thenReturn("mock data");

        Service service = new Service(mockDependency);
        String result = service.processData();

        assertEquals("Processed: mock data", result);
    }
}

Kesimpulan #

Unit testing di Java adalah praktik penting untuk memastikan bahwa setiap unit kode bekerja sebagaimana mestinya. Framework seperti JUnit dan TestNG memudahkan penulisan, eksekusi, dan pemeliharaan tes unit. Menggunakan anotasi untuk mengelola siklus hidup tes, dan pustaka mocking untuk menangani dependensi eksternal, membantu memastikan bahwa kode Anda berfungsi dengan baik dan memudahkan pengembangan perangkat lunak yang handal dan berkualitas.

« Web Server
Mocking »