Tes Unit dan Integrasi Dengan Kategori Maven dan JUnit

Contoh ini menunjukkan cara memisahkan pengujian unit dan integrasi menggunakan kategori Maven dan JUnit.

Ini sangat berguna untuk rangkaian pengujian yang ada dan dapat diterapkan dalam hitungan menit.

Posting saya sebelumnya menunjukkan bagaimana kita menggunakan profil maven untuk memisahkan tes unit dan integrasi.

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

Ini telah menjadi posting yang sangat baik dibaca dan saya suka bagaimana ia menggunakan direktori yang terpisah. Namun contoh ini menunjukkan teknik yang jauh lebih sederhana yang dapat dengan mudah diterapkan pada rangkaian pengujian lama.

Ini menawarkan sebagian besar manfaat dari aslinya, dan duduk lebih nyaman di dunia Maven.

Kode untuk contohnya ada di sini.

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

Mulai JUnit 4.8 Anda dapat menentukan kategori Anda sendiri untuk pengujian. Ini memungkinkan Anda memberi label dan mengelompokkan pengujian.

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

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

Langkah pertama dalam mengelompokkan pengujian menggunakan kategori adalah membuat antarmuka penanda.

Antarmuka ini akan digunakan untuk menandai semua pengujian yang ingin Anda jalankan sebagai pengujian integrasi.

public interface IntegrationTest {} 

Tambahkan anotasi kategori ke bagian atas kelas pengujian Anda. Ini mengambil nama antarmuka baru Anda.

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

Kategori dapat digunakan untuk menandai kelas atau metode. Sungguh menurut pendapat saya, Anda hanya harus menandai kelas.

Jika Anda memiliki pengujian unit dan integrasi dalam satu kelas, maka pisahkan.

Keunggulan dari solusi ini adalah tidak ada yang benar-benar berubah untuk sisi pengujian unit.

Kami hanya menambahkan beberapa konfigurasi ke plugin maven surefire untuk mengabaikan pengujian integrasi apa pun.

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

Ada 2 bagian yang sangat penting. Yang pertama adalah mengonfigurasi surefire untuk mengecualikan semua tes integrasi.

com.test.annotation.type.IntegrationTest 

Surefire akan menjalankan semua pengujian Anda, kecuali yang ditandai sebagai pengujian integrasi.

Bagian penting lainnya adalah memastikan plugin yang pasti menggunakan penyedia JUnit yang benar. Penyedia JUnit47 diperlukan untuk mendeteksi kategori dengan benar.

  org.apache.maven.surefire surefire-junit47 2.12   

Untuk memastikan ini berfungsi dengan benar, kami dapat menjalankan pengujian unit

mvn clean test 

Anda dapat melihat dari output di bawah ini bahwa pengujian unit dijalankan, tetapi bukan pengujian 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 sederhana.

Kami menggunakan plugin standar gagal aman dan mengkonfigurasinya untuk hanya menjalankan tes integrasi.

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

Konfigurasi tersebut menggunakan sasaran eksekusi standar untuk menjalankan plugin yang aman dari kegagalan selama fase uji integrasi build.

Konfigurasi berikut memastikan hanya pengujian integrasi yang dijalankan.

com.test.annotation.type.IntegrationTest 

Dan sekali lagi penyedia JUnit harus dikonfigurasi dengan benar.

  org.apache.maven.surefire surefire-junit47 2.12   

Itu dia!

Kami sekarang dapat menjalankan seluruh build.

mvn clean install 

Kali ini saat pengujian unit berjalan, pengujian integrasi dijalankan selama fase pengujian 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 cakupan kode ke metode ini, lihat tautan ini.

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

Untuk contoh yang lebih lengkap yang menggunakan start Tomcat dan database.

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

Artikel ini, "Tes Unit dan Integrasi Dengan Kategori Maven dan JUnit" awalnya diterbitkan oleh JavaWorld.