Pelari Uji JUnit 4 Kustom

1. Ikhtisar

Dalam artikel singkat ini, kami akan fokus pada cara menjalankan pengujian JUnit menggunakan runner pengujian kustom.

Sederhananya, untuk menentukan runner kustom, kita perlu menggunakan anotasi @RunWith .

2. Persiapan

Mari kita mulai dengan menambahkan dependensi JUnit standar ke dalam pom.xml kita :

 junit junit 4.12 

3. Menerapkan Runner Kustom

Dalam contoh berikut, kami akan menunjukkan cara menulis Runner kustom kami sendiri - dan menjalankannya menggunakan @ RunWith .

JUnit Runner adalah class yang memperluas class Runner abstrak JUnit dan bertanggung jawab untuk menjalankan pengujian JUnit , biasanya menggunakan refleksi.

Di sini, kami mengimplementasikan metode abstrak kelas Runner :

public class TestRunner extends Runner { private Class testClass; public TestRunner(Class testClass) { super(); this.testClass = testClass; } @Override public Description getDescription() { return Description .createTestDescription(testClass, "My runner description"); } @Override public void run(RunNotifier notifier) { System.out.println("running the tests from MyRunner: " + testClass); try { Object testObject = testClass.newInstance(); for (Method method : testClass.getMethods()) { if (method.isAnnotationPresent(Test.class)) { notifier.fireTestStarted(Description .createTestDescription(testClass, method.getName())); method.invoke(testObject); notifier.fireTestFinished(Description .createTestDescription(testClass, method.getName())); } } } catch (Exception e) { throw new RuntimeException(e); } } }

The getDescription metode diwariskan dari dideskripsikan dan mengembalikan Keterangan yang berisi informasi yang kemudian diekspor dan dapat digunakan oleh berbagai alat.

Dalam implementasi run , kami menjalankan metode pengujian target menggunakan refleksi.

Kami telah mendefinisikan konstruktor yang mengambil argumen Kelas ; ini adalah persyaratan JUnit. Saat runtime, JUnit akan meneruskan kelas pengujian target ke konstruktor ini.

RunNotifier digunakan untuk mengaktifkan peristiwa yang memiliki informasi tentang kemajuan pengujian.

Mari gunakan runner di kelas pengujian kita:

public class Calculator { public int add(int a, int b) { return a + b; } } @RunWith(TestRunner.class) public class CalculatorTest { Calculator calculator = new Calculator(); @Test public void testAddition() { Syste.out.println("in testAddition"); assertEquals("addition", 8, calculator.add(5, 3)); } }

Hasil yang kami dapatkan:

------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.baeldung.junit.CalculatorTest running the tests from MyRunner: class com.baeldung.junit.CalculatorTest in testAddition Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

4. Pelari Khusus

Daripada memperluas kelas Runner level rendah , seperti yang kita lakukan di contoh terakhir, kita bisa memperluas salah satu subkelas khusus Runner : ParentRunner atau BlockJUnit4Runner .

Kelas ParentRunner abstrak menjalankan pengujian secara hierarkis.

BlockJUnit4Runner adalah kelas konkret dan jika kita lebih suka menyesuaikan metode tertentu, kita mungkin akan memperluas kelas ini.

Mari kita lihat dengan sebuah contoh:

public class BlockingTestRunner extends BlockJUnit4ClassRunner { public BlockingTestRunner(Class klass) throws InitializationError { super(klass); } @Override protected Statement methodInvoker(FrameworkMethod method, Object test) { System.out.println("invoking: " + method.getName()); return super.methodInvoker(method, test); } }

Menganotasi kelas dengan @RunWith (JUnit4.class) akan selalu memanggil runner JUnit 4 default dalam versi JUnit saat ini; kelas ini alias pelari kelas JUnit 4 default saat ini:

@RunWith(JUnit4.class) public class CalculatorTest { Calculator calculator = new Calculator(); @Test public void testAddition() { assertEquals("addition", 8, calculator.add(5, 3)); } }

5. Kesimpulan

JUnit Runners sangat mudah beradaptasi dan membiarkan pengembang mengubah prosedur eksekusi pengujian dan keseluruhan proses pengujian.

Jika kita hanya ingin membuat perubahan kecil, ada baiknya untuk melihat metode yang dilindungi dari runner BlockJUnit4Class .

Beberapa implementasi pelari pihak ketiga yang populer untuk digunakan termasuk SpringJUnit4ClassRunner, MockitoJUnitRunner, HierarchicalContextRunner, Cucumber Runner, dan banyak lagi.

Penerapan semua contoh dan cuplikan kode ini dapat ditemukan di proyek GitHub - ini adalah proyek Maven, jadi semestinya mudah untuk mengimpor dan menjalankannya apa adanya.