Ujian Unit dan Integrasi Dengan Kategori Maven dan JUnit

Contoh ini menunjukkan cara membahagi ujian unit dan integrasi menggunakan kategori Maven dan JUnit.

Ia sangat berguna untuk suite ujian yang ada dan dapat dilaksanakan dalam beberapa minit.

Catatan saya sebelum ini menunjukkan bagaimana kita menggunakan profil maven untuk memecah unit dan ujian integrasi.

//johndobie.blogspot.co.uk/2011/06/seperating-maven-unit-integration-tests.html

Ini adalah catatan yang sangat baik dibaca dan saya suka bagaimana ia menggunakan direktori terpisah. Walau bagaimanapun, contoh ini menunjukkan teknik yang lebih mudah dan mudah digunakan pada suite ujian warisan.

Ia menawarkan sebahagian besar faedah yang asli, dan duduk dengan lebih selesa di dunia Maven.

Kod untuk contohnya ada di sini.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/categor... mvn clean install 

Mulai JUnit 4.8, anda boleh menentukan kategori ujian anda sendiri. Ini membolehkan anda melabel dan mengumpulkan ujian.

Contoh ini menunjukkan betapa mudahnya memisahkan ujian unit dan integrasi menggunakan anotasi @Catgegory.

//kentbeck.github.com/junit/javadoc/latest/org/junit/experimental/categories/Categories.html

Langkah pertama dalam mengelompokkan ujian menggunakan kategori adalah membuat antara muka penanda.

Antaramuka ini akan digunakan untuk menandakan semua ujian yang ingin anda jalankan sebagai ujian integrasi.

public interface IntegrationTest {} 

Tambahkan anotasi kategori ke bahagian atas kelas ujian anda. Ia memerlukan nama antara muka baru anda.

import org.junit.experimental.categories.Category; @Category(IntegrationTest.class) public class ExampleIntegrationTest{ @Test public void longRunningServiceTest() throws Exception { } } 

Kategori boleh digunakan untuk menandakan kelas atau kaedah. Sebenarnya pada pendapat saya, anda hanya perlu menandakan kelas.

Sekiranya anda mempunyai ujian unit dan integrasi dalam satu kelas, maka bahagikannya.

Keindahan penyelesaian ini adalah bahawa tidak ada yang benar-benar berubah untuk bahagian ujian unit.

Kami hanya menambahkan beberapa konfigurasi ke plugin maven surefire untuk membuatnya mengabaikan sebarang ujian integrasi.

 org.apache.maven.plugins maven-surefire-plugin 2.11   org.apache.maven.surefire surefire-junit47 2.12     **/*.class  com.test.annotation.type.IntegrationTest   

Terdapat 2 bahagian yang sangat penting. Yang pertama adalah mengkonfigurasi firefire untuk mengecualikan semua ujian integrasi.

com.test.annotation.type.IntegrationTest 

Surefire akan menjalankan semua ujian anda, kecuali yang ditandakan sebagai ujian integrasi.

Bahagian penting lain adalah memastikan plugin surefire menggunakan penyedia JUnit yang betul. Penyedia JUnit47 diperlukan untuk mengesan kategori dengan betul.

  org.apache.maven.surefire surefire-junit47 2.12   

Untuk memastikan ini berfungsi dengan betul, kita boleh menjalankan ujian unit

mvn clean test 

Anda dapat melihat dari output di bawah bahawa ujian unit dijalankan, tetapi bukan ujian integrasi.

------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.test.EmptyUnitTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ 

Sekali lagi konfigurasi untuk ini sangat mudah.

Kami menggunakan plugin failafe standard dan mengkonfigurasinya untuk hanya menjalankan ujian integrasi.

 maven-failsafe-plugin 2.12   org.apache.maven.surefire surefire-junit47 2.12    com.test.annotation.type.IntegrationTest     integration-test    **/*.class      

Konfigurasi menggunakan tujuan pelaksanaan standard untuk menjalankan plugin failafe semasa fasa integrasi-ujian build.

Konfigurasi berikut memastikan hanya ujian integrasi yang dijalankan.

com.test.annotation.type.IntegrationTest 

Dan sekali lagi penyedia JUnit mesti dikonfigurasikan dengan betul.

  org.apache.maven.surefire surefire-junit47 2.12   

Itu sahaja!

Kita sekarang boleh menjalankan keseluruhan binaan.

mvn clean install 

Kali ini serta ujian unit dijalankan, ujian integrasi dijalankan semasa fasa ujian integrasi.

------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.test.AnotherEmptyIntegrationTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec Running com.test.EmptyIntegrationTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Results : Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 

Untuk melihat betapa mudahnya menambahkan liputan kod ke kaedah ini, lihat pautan ini.

//johndobie.blogspot.co.uk/2012/05/easy-unit-and-integration-code-coverage.html

Untuk contoh yang lebih lengkap yang menggunakan bermula Tomcat dan pangkalan data.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/code-co... mvn clean install -Ptomcat-embedded 

Ini berdasarkan contoh ini

//johndobie.blogspot.com/2011/10/maven-integration-testing-and-spring.html

Kisah ini, "Ujian Unit dan Integrasi Dengan Kategori Maven dan JUnit" pada mulanya diterbitkan oleh JavaWorld.