Cara Membuat Tes Bersarang di JUnit

Test suite yang ditulis dengan baik akan memiliki beberapa tes untuk fitur tertentu. Dengan mengelompokkan fitur terkait, Anda dapat mengekspresikan hubungan antara beberapa grup pengujian. Salah satu manfaat utama dari pengelompokan kelas pengujian unit adalah dapat mengurangi jumlah kode pengujian yang Anda tulis, karena pengujian yang dikelompokkan berbagi sumber daya.


JUnit 5 memungkinkan Anda membuat pengujian bersarang menggunakan anotasi @Nested. Dalam artikel ini, Anda akan mempelajari apa itu anotasi @Nested dan cara menggunakannya.


Apa itu Tes Bersarang?

Anotasi @Nested JUnit menandakan bahwa kelas yang terkait dengannya adalah kelas dalam, yang merupakan anggota kelas lain. Pengujian bersarang adalah kelas pengujian yang berisi anotasi @Nested, karena ini berarti ada satu (atau lebih) kelas dalam dalam kelas pengujian tingkat atas. Kelas bersarang dapat muncul di dalam kelas tingkat atas, atau di dalam kelas yang juga bersarang.

Membuat Kelas Java untuk Diuji

Kelas pengujian bersarang mewarisi semua fitur kelas induknya. Oleh karena itu, waktu terbaik untuk membuat pengujian bersarang adalah ketika ada pengelompokan logis dari kasus uji atau ketika satu kasus uji memiliki fitur yang berbeda. Contoh bagusnya adalah saat Anda ingin menguji kemampuan kelas untuk membuat objek yang berguna. Contoh lain adalah ketika satu metode memiliki dua atau lebih tujuan.

Berikut adalah contoh kelas yang mungkin Anda gunakan dalam aplikasi ritel, yang menunjukkan bagaimana Anda bisa membuat pengujian bersarang.

public class Customer {
protected int customerId;
protected String customerName;
protected String customerCode;


public Customer() {
this.customerId = ;
this.customerName = "";
this.customerCode ="";
}


public Customer(int customerId, String customerName, String customerCode) {
this.customerId = customerId;
this.customerName = customerName;
this.customerCode = customerCode;
}


public Customer(Customer customer) {
this.customerId = customer.customerId;
this.customerName = customer.customerName;
this.customerCode = customer.customerCode;
}


public int getCustomerId() {
return customerId;
}

public void setCustomerId(int customerId) {
this.customerId = customerId;
}

public String getCustomerName() {
return customerName;
}

public void setCustomerName(String customerName) {
this.customerName = customerName;
}

public String getCustomerCode() {
return customerCode;
}

public void setCustomerCode(String customerCode) {
this.customerCode = customerCode;
}


public double customerType(String customerCode) {
double discount = ;

if (customerCode.toLowerCase().equals("pre")) {
discount = 0.10;
} else if (customerCode.toLowerCase().equals("gen")) {
discount = 0.02;
} else if (customerCode.toLowerCase().equals("new")) {
discount = 0.05;
}

return discount;
}


public double grandTotal(double total) {
double discount = customerType(customerCode);
double discountPercentage = total * discount;
double finalTotal = total - discountPercentage;
return finalTotal;
}
}

Kelas Pelanggan ini berisi semua komponen Kelas Java, lengkap dengan dua metode.

See also  4 Metode Pengujian Yang Harus Diketahui Setiap Pengembang

Membuat Tes Bersarang Dengan JUnit 5

Kelas Pelanggan memiliki beberapa konstruktor, getter, dan setter, dan dua metode. Anda dapat membuat kelas bersarang (dalam kelas pengujian Pelanggan) yang membuat objek Pelanggan baru dan menguji semua komponennya.

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

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;

@DisplayName("Customer Test Class Showing How to Create Nested Tests.")
class CustomerTest {
protected int customerId = 301;
protected String customerName = "Mike Wilson";
protected String customerCode = "Pre";
protected double total = 600;

@Nested
@DisplayName("Customer Builder Nested Test Class Within a Top-Level Test Class")
class CustomerBuilderTest {
Customer customer = new Customer(customerId, customerName, customerCode);
double grandTotal = customer.grandTotal(total);

@Test
@DisplayName("Testing the Customer's Class Constructors, Getters and Setters, and Methods.")
void customerBuilder() {
assertAll(() -> {
assertEquals(customerId, customer.getCustomerId());
assertEquals(customerName, customer.getCustomerName());
assertEquals(customerCode, customer.getCustomerCode());
assertEquals(0.10, customer.customerType(customerCode));
assertEquals(540, grandTotal);
});
}
}
}

Kelas CustomerTest adalah kelas pengujian tingkat atas ke kelas CustomerBuilderTest bersarang. CustomerBuilderTest membuat objek Pelanggan baru dan menguji komponennya menggunakan tes pernyataan.

Menjalankan kelas pengujian CustomerTest menghasilkan hasil pengujian yang berhasil berikut ini:

Nama kelas pengujian dan metode pengujian bersifat deskriptif dan komprehensif, berkat Anotasi @DisplayName.

Mengetahui Cara Menguji Perangkat Lunak itu Penting

Teknologi merupakan aspek penting dalam kehidupan sehari-hari bagi kebanyakan orang. Taruhan untuk membuat perangkat lunak yang melakukan persis seperti yang seharusnya dilakukan tidak pernah lebih tinggi.

Sebuah mobil self-driving yang salah menghitung kedekatannya dengan objek lain dapat menyebabkan kecelakaan besar. Oleh karena itu, Anda perlu menguji aplikasi Anda di setiap tahap perkembangannya.

See also  Cara Membuat API NodeJS Tanpa Menggunakan Kerangka