Pelari Ujian JUnit 4 Custom

1. Gambaran keseluruhan

Dalam artikel ringkas ini, kita akan memberi tumpuan kepada cara menjalankan ujian JUnit menggunakan pelari ujian tersuai.

Ringkasnya, untuk menentukan pelari tersuai, kita perlu menggunakan anotasi @RunWith .

2. Persiapan

Mari mulakan dengan menambahkan kebergantungan JUnit standard ke pom.xml kami :

 junit junit 4.12 

3. Melaksanakan Custom Runner

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

JUnit Runner adalah kelas yang meluaskan kelas Runner abstrak JUnit dan bertanggungjawab untuk menjalankan ujian JUnit , biasanya menggunakan refleksi.

Di sini, kami menerapkan kaedah 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 kaedah yang diwarisi daripada describable dan mengembalikan Penerangan yang mengandungi maklumat yang kemudiannya dieksport dan boleh digunakan oleh pelbagai alat.

Dalam pelaksanaan dijalankan , kami menggunakan kaedah ujian sasaran menggunakan refleksi.

Kami telah menentukan konstruktor yang mengambil hujah Kelas ; ini adalah keperluan JUnit. Pada waktu runtime, JUnit akan lulus kelas ujian sasaran kepada konstruktor ini.

RunNotifier digunakan untuk menembak peristiwa yang mempunyai maklumat mengenai kemajuan ujian.

Mari gunakan pelari di kelas ujian kami:

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)); } }

Hasilnya kita dapat:

------------------------------------------------------- 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 Khas

Daripada memperluas kelas Runner tahap rendah , seperti yang kita lakukan pada contoh terakhir, kita dapat memperluas salah satu subkelas Runner : ParentRunner atau BlockJUnit4Runner khusus .

Kelas ParentRunner yang abstrak menjalankan ujian secara hierarki.

BlockJUnit4Runner adalah kelas konkrit dan jika kita lebih suka menyesuaikan kaedah tertentu, kita mungkin akan melanjutkan kelas ini.

Mari kita lihat dengan 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); } }

Mengenotasi kelas dengan @RunWith (JUnit4.class) akan selalu memanggil pelari JUnit 4 lalai dalam versi JUnit semasa; kelas ini mengasingkan pelari kelas JUnit 4 lalai semasa:

@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 disesuaikan dan membiarkan pembangun mengubah prosedur pelaksanaan ujian dan keseluruhan proses ujian.

Sekiranya kita hanya ingin membuat perubahan kecil, ada baiknya kita melihat kaedah terlindung BlockJUnit4Class runner.

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

Pelaksanaan semua contoh dan coretan kod ini terdapat dalam projek GitHub - ini adalah projek Maven, jadi mudah untuk diimport dan dijalankan sebagaimana adanya.