Framework Pengujian Espresso - Ringkasan JUnit

Dalam bab ini, mari kita memahami dasar-dasar JUnit , framework pengujian unit populer yang dikembangkan oleh komunitas Java tempat framework pengujian espresso dibuat.

JUnit adalah standar de facto untuk pengujian unit aplikasi Java. Meskipun, ini populer untuk pengujian unit, ini memiliki dukungan dan ketentuan lengkap untuk pengujian instrumentasi juga. Pustaka pengujian Espresso memperluas kelas JUnit yang diperlukan untuk mendukung pengujian instrumentasi berbasis Android.

Tulis Tes Satuan Sederhana

Mari kita buat kelas Java, Computation (Computation.java) dan tulis operasi matematika sederhana, Penjumlahan dan Perkalian . Kemudian, kami akan menulis kasus uji menggunakan JUnit dan memeriksanya dengan menjalankan kasus uji.

  • Mulai Android Studio.

  • Buka HelloWorldApp yang dibuat di bab sebelumnya.

  • Buat file, Computation.java di app / src / main / java / com / tutorialspoint / espressosamples / helloworldapp / dan tulis dua fungsi - Sum dan Multiply seperti yang ditentukan di bawah ini,

package com.tutorialspoint.espressosamples.helloworldapp;
public class Computation {
   public Computation() {}
   public int Sum(int a, int b) {
      return a + b;
   }
   public int Multiply(int a, int b) {
      return a * b;
   }
}
  • Buat file, ComputationUnitTest.java di app / src / test / java / com / tutorialspoint / espressosamples / helloworldapp dan tulis kasus pengujian unit untuk menguji fungsionalitas Sum dan Multiply seperti yang ditentukan di bawah ini

package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComputationUnitTest {
   @Test
   public void sum_isCorrect() {
      Computation computation = new Computation();
      assertEquals(4, computation.Sum(2,2));
   }
   @Test
   public void multiply_isCorrect() {
      Computation computation = new Computation();
      assertEquals(4, computation.Multiply(2,2));
   }
}

Di sini, kami telah menggunakan dua istilah baru - @Test dan assertEquals . Secara umum, JUnit menggunakan anotasi Java untuk mengidentifikasi kasus pengujian di kelas dan informasi tentang cara menjalankan kasus pengujian. @Test adalah salah satu anotasi Java, yang menetapkan bahwa fungsi tertentu adalah kasus uji junit. assertEquals adalah fungsi untuk menegaskan bahwa argumen pertama (nilai yang diharapkan) dan argumen kedua (nilai yang dihitung) adalah sama dan sama. JUnit menyediakan sejumlah metode pernyataan untuk skenario pengujian yang berbeda.

  • Sekarang, jalankan ComputationUnitTest di Android studio dengan mengklik kanan kelas dan menjalankan opsi Run 'ComputationUnitTest' seperti yang dijelaskan di bab sebelumnya. Ini akan menjalankan kasus uji unit dan melaporkan keberhasilan.

Hasil pengujian unit komputasi adalah sebagai berikut -

Anotasi

Framework JUnit menggunakan anotasi secara ekstensif . Beberapa anotasi penting adalah sebagai berikut -

  • @Test

  • @Before

  • @After

  • @BeforeClass

  • @AfterClass

  • @Rule

@Tes anotasi

@Test adalah anotasi yang sangat penting dalam framework JUnit . @Test digunakan untuk membedakan metode normal dari metode kasus uji. Setelah metode didekorasi dengan anotasi @Test , maka metode tersebut dianggap sebagai kasus Uji dan akan dijalankan oleh JUnit Runner . JUnit Runner adalah kelas khusus, yang digunakan untuk mencari dan menjalankan kasus pengujian JUnit yang tersedia di dalam kelas java. Untuk saat ini, kami menggunakan opsi build-in Android Studio untuk menjalankan pengujian unit (yang selanjutnya menjalankan JUnit Runner ). Kode contoh adalah sebagai berikut,

package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class ComputationUnitTest {
   @Test
   public void multiply_isCorrect() {
      Computation computation = new Computation();
      assertEquals(4, computation.Multiply(2,2));
   }
}

@Sebelum

Anotasi @Before digunakan untuk merujuk metode, yang perlu dipanggil sebelum menjalankan metode pengujian apa pun yang tersedia dalam kelas pengujian tertentu. Misalnya dalam sampel kami, objek Computation dapat dibuat dalam metode terpisah dan dianotasi dengan @Before sehingga akan berjalan sebelum kasus uji sum_isCorrect dan multiply_isCorrect . Kode lengkapnya adalah sebagai berikut,

package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class ComputationUnitTest {
   Computation computation = null;
   @Before
   public void CreateComputationObject() {
      this.computation = new Computation();
   }
   @Test
   public void sum_isCorrect() {
      assertEquals(4, this.computation.Sum(2,2));
   }
   @Test
   public void multiply_isCorrect() {
      assertEquals(4, this.computation.Multiply(2,2));
   }
}

@Setelah

@After mirip dengan @Before , tetapi metode yang dianotasi dengan @After akan dipanggil atau dijalankan setelah setiap kasus uji dijalankan. Kode sampelnya adalah sebagai berikut,

package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class ComputationUnitTest {
   Computation computation = null;
   @Before
   public void CreateComputationObject() {
      this.computation = new Computation();
   }
   @After
   public void DestroyComputationObject() {
      this.computation = null;
   }
   @Test
   public void sum_isCorrect() {
      assertEquals(4, this.computation.Sum(2,2));
   }
   @Test
   public void multiply_isCorrect() {
      assertEquals(4, this.computation.Multiply(2,2));
   }
}

@Sebelum kelas

@BeforeClass mirip dengan @Before , tetapi metode yang dianotasi dengan @BeforeClass hanya akan dipanggil atau dijalankan satu kali sebelum menjalankan semua kasus pengujian di kelas tertentu. Ini berguna untuk membuat objek intensif sumber daya seperti objek koneksi database. Ini akan mengurangi waktu untuk mengeksekusi kumpulan kasus uji. Metode ini harus statis agar berfungsi dengan baik. Dalam contoh kami, kami dapat membuat objek komputasi satu kali sebelum menjalankan semua kasus uji seperti yang ditentukan di bawah ini,

package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class ComputationUnitTest {
   private static Computation computation = null;
   @BeforeClass
   public static void CreateComputationObject() {
      computation = new Computation();
   }
   @Test
   public void sum_isCorrect() {
      assertEquals(4, computation.Sum(2,2));
   }
   @Test
   public void multiply_isCorrect() {
      assertEquals(4, computation.Multiply(2,2));
   }
}

@Afterlass

@AfterClass mirip dengan @BeforeClass , tetapi metode yang dianotasi dengan @AfterClass akan dipanggil atau dijalankan hanya sekali setelah semua kasus pengujian di kelas tertentu dijalankan. Metode ini juga harus statis agar berfungsi dengan baik. Kode sampelnya adalah sebagai berikut -

package com.tutorialspoint.espressosamples.helloworldapp;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class ComputationUnitTest {
   private static Computation computation = null;
   @BeforeClass
   public static void CreateComputationObject() {
      computation = new Computation();
   }
   @AfterClass
   public static void DestroyComputationObject() {
      computation = null;
   }
   @Test
   public void sum_isCorrect() {
      assertEquals(4, computation.Sum(2,2));
   }
   @Test
   public void multiply_isCorrect() {
      assertEquals(4, computation.Multiply(2,2));
   }
}

@Aturan

Anotasi @Rule adalah salah satu sorotan JUnit . Ini digunakan untuk menambahkan perilaku ke kasus uji. Kami hanya dapat membuat anotasi bidang tipe TestRule . Ini benar-benar menyediakan set fitur yang disediakan oleh @Before dan @After penjelasan tetapi dalam cara yang efisien dan dapat digunakan kembali. Misalnya, kami mungkin memerlukan folder sementara untuk menyimpan beberapa data selama kasus uji. Biasanya, kita perlu membuat folder sementara sebelum menjalankan test case (menggunakan anotasi @Before atau @BeforeClass) dan memusnahkannya setelah test case dijalankan (menggunakan anotasi @After atau @AfterClass). Sebagai gantinya, kita dapat menggunakan kelas TemporaryFolder (dari tipe TestRule ) yang disediakan oleh framework JUnit untuk membuat folder sementara untuk semua kasus pengujian kita dan folder sementara akan dihapus saat dan saat kasus uji dijalankan. Kita perlu membuat variabel baru dengan tipe TemporaryFolder dan perlu menambahkan @Rule seperti yang ditentukan di bawah ini,

package com.tutorialspoint.espressosamples.helloworldapp;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;

public class ComputationUnitTest {
   private static Computation computation = null;
   @Rule
   public TemporaryFolder folder = new TemporaryFolder();
   @Test
   public void file_isCreated() throws IOException {
      folder.newFolder("MyTestFolder");
      File testFile = folder.newFile("MyTestFile.txt");
      assertTrue(testFile.exists());
   }
   @BeforeClass
   public static void CreateComputationObject() {
      computation = new Computation();
   }
   @AfterClass
   public static void DestroyComputationObject() {
      computation = null;
   }
   @Test
   public void sum_isCorrect() {
      assertEquals(4, computation.Sum(2,2));
   }
   @Test
   public void multiply_isCorrect() {
      assertEquals(4, computation.Multiply(2,2));
   }
}

Perintah Eksekusi

Di JUnit , metode yang dianotasi dengan anotasi berbeda akan dijalankan dalam urutan tertentu seperti yang ditunjukkan di bawah ini,

  • @BeforeClass

  • @Rule

  • @Before

  • @Test

  • @After

  • @AfterClass

Tuntutan

Assertion adalah cara untuk memeriksa apakah nilai yang diharapkan dari kasus uji cocok dengan nilai sebenarnya dari hasil kasus uji. JUnit memberikan pernyataan untuk skenario yang berbeda; beberapa pernyataan penting dicantumkan di bawah -

  • fail() - Untuk secara eksplisit membuat kasus uji gagal.

  • assertTrue(boolean test_condition) - Memeriksa apakah test_condition benar

  • assertFalse(boolean test_condition) - Memeriksa apakah test_condition salah

  • assertEquals(expected, actual) - Memeriksa apakah kedua nilai sama

  • assertNull(object) - Memeriksa apakah objeknya nol

  • assertNotNull(object) - Memeriksa bahwa objek tidak null

  • assertSame(expected, actual) - Memeriksa apakah keduanya merujuk objek yang sama.

  • assertNotSame(expected, actual) - Memeriksa apakah keduanya merujuk objek yang berbeda.