Pengeluaran JUnit 5 memudahkan penyepaduan perpustakaan ini ke dalam projek kerana tidak perlu berhijrah dari JUnit 4. Walau bagaimanapun, dalam projek besar menggunakan kedua-dua JUnit 5 dan 4, kewujudan bersama ini boleh menyebabkan kekeliruan dan kesukaran penyelenggaraan. Untuk menangani isu ini, artikel ini mengesyorkan mengambil langkah berikut: memaklumkan pasukan tentang ciri baharu dalam JUnit 5, menggalakkan penulisan ujian baharu menggunakan JUnit 5 dan mengikut peraturan Pengakap apabila mengalih keluar JUnit 4. Selain itu, artikel ini meneroka perubahan ketara dalam JUnit 5, termasuk kemas kini pada anotasi, kaedah dan konfigurasi ujian, serta anotasi @ParameterizedTest baharu. Akhir sekali, artikel itu menyerlahkan kepentingan mengecualikan kebergantungan, mencipta kelas konfigurasi dan menggunakan OpenRewrite untuk memfaktorkan semula kod sumber secara automatik untuk membantu berhijrah ke JUnit 5 dan memastikan projek dikemas kini.
Selepas JUnit 5 dikeluarkan, ramai pembangun baru menambah perpustakaan baharu yang hebat ini pada projek mereka kerana tidak seperti versi lain, dalam versi baharu ini, tidak perlu berhijrah dari JUnit 4 ke 5, Dengan hanya memasukkan yang baharu perpustakaan dalam projek anda, dengan semua enjin JUnit 5, anda boleh menjalankan ujian baharu menggunakan JUnit 5, manakala ujian lama menggunakan JUnit 4 atau 3 akan terus berjalan tanpa masalah.
Tetapi apa yang berlaku dalam projek besar, yang dibina 10 tahun lalu, dengan dua versi JUnit berjalan selari?
Pemaju baharu telah mula mengusahakan projek itu, ada yang berpengalaman JUnit dan ada yang tidak. Ujian baharu dibuat menggunakan JUnit 5, ujian baharu dibuat menggunakan JUnit 4, pada satu ketika, pembangun tanpa mengetahuinya, apabila mereka mencipta senario baharu dalam ujian JUnit 5 yang telah dibuat, mereka hanya memasukkan anotasi JUnit 4, dan ujian menjadi hibrid, beberapa @Test ialah JUnit 4, beberapa @Test ialah JUnit 5, dan menjadi lebih sukar untuk mengalih keluar perpustakaan JUnit 4 setiap hari.
Jadi, bagaimana untuk menyelesaikan masalah ini? Mula-mula, anda perlu menunjukkan kepada pasukan anda apa yang datang dari JUnit 5 dan apa yang datang dari JUnit 4 supaya ujian baharu boleh dibuat menggunakan JUnit 5 dan bukannya JUnit 4. Selepas itu, setiap kali mereka lulus ujian JUnit 4, mengikut peraturan Pengakap Lelaki, mereka perlu berhijrah ke JUnit 5.
Mari kita lihat perubahan besar yang dikeluarkan dalam JUnit 5. Semuanya bermula dengan nama, dalam JUnit 5 anda tidak melihat pakej bernama org.junit5, anda melihat org.junit.jupiter. Secara keseluruhannya, semua yang anda lihat mempunyai "Jupiter" padanya, yang bermaksud datang dari JUnit 5. Mereka memilih nama ini kerana Musytari, yang bermula dengan "JU," ialah planet kelima daripada matahari.
Perubahan lain ialah tentang @Test, anotasi ini telah dialihkan ke pakej baharu: org.junit.jupiter.api dan kini tidak lagi menggunakan sifat seperti "dijangka" atau "tamat masa", tetapi menggunakan sambungan. Contohnya, untuk tamat masa, kini anda mempunyai anotasi: @Timeout(value = 100, unit = TimeUnit.MILLISECONDS). Perubahan lain ialah kaedah ujian mahupun kelas tidak perlu didedahkan kepada umum.
@Before Now dan bukannya @After anda perlu menggunakan @BeforeEach dan @AfterEach dalam konfigurasi ujian anda dan anda juga mempunyai @BeforeAlland @AfterAll.
Untuk mengabaikan ujian, kini anda perlu menggunakan @Disable dan bukannya @Ignore
Salah satu berita baik yang dikeluarkan dalam JUnit 5 ialah anotasi @ParameterizedTest, yang boleh menjalankan ujian beberapa kali dengan parameter yang berbeza. Sebagai contoh, jika anda ingin menguji kaedah yang mencipta objek tertentu, dan anda ingin mengesahkan bahawa medan diisi dengan betul, anda boleh melakukan perkara berikut:
@ParameterizedTest @MethodSource("getInvalidSources") void shouldCheckInvalidFields(String name, String job, String expectedMessage) { Throwable exception = catchThrowable(() -> new Client(name, job)); assertThat(exception).isInstanceOf(IllegalArgumentException.class) .hasMessageContaining(expectedMessage); } static Stream<Arguments> getInvalidSources() { return Stream.of(Arguments.arguments("Jean Donato", "", "Job is empty"), Arguments.arguments("", "Dev", "Name is empty")); }
Terdapat banyak ciri menarik dalam JUnit 5 yang saya syorkan anda menyemak Panduan Pengguna JUnit 5 untuk menganalisis ciri yang berguna untuk projek anda.
Sekarang semua pembangun tahu perkara yang telah berubah dalam JUnit 5, anda boleh memulakan proses mengalih keluar JUnit 4 daripada projek anda. Jadi, jika anda masih menggunakan JUnit 4 pada tahun 2024, dan projek anda ialah projek besar, anda mungkin mempunyai beberapa kebergantungan yang menggunakan JUnit 4. Saya syorkan anda memprofilkan perpustakaan anda untuk menyemak sama ada sesetengah daripadanya menggunakan JUnit 4.
Dalam imej di bawah, saya menggunakan penganalisis pergantungan IntelliJ.
Seperti yang anda lihat, Jersey-Test menggunakan Junit 4, iaitu, walaupun saya mengeluarkan Junit 4 dari projek, Junit 4 masih berfungsi kerana Jersey. 5 telah diperkenalkan dalam ujian jersi 2.35 tetapi saya tidak dapat mengemas kini rangka kerja ujian jersi kerana perpustakaan lain pecah dalam projek saya. Jadi, apa yang boleh saya lakukan dalam keadaan ini?
Saya dapat mengecualikan JUnit daripada Jersey melalui pengecualian pergantungan Maven (seperti yang ditunjukkan dalam imej di bawah). Ini tidak lagi akan menggunakan JUnit 4, tetapi JUnit 5 kami.
当你运行一些使用Jersey的测试时,它们不会被加载,因为Jersey中有使用JUnit 4注释的方法,setUpand tearDown,using@Before和@After。为了解决这个问题,您可以创建一个“配置类”,其扩展JerseyTest实现setUpandtearDown并@BeforeEach调用@AfterEachand 。super.setUp()super.TearDown()
public class JerseyConfigToJUnit5 extends JerseyTest { @BeforeEach public void setUp() throws Exception { super.setUp(); } @AfterEach public void tearDown() throws Exception { super.tearDown(); } }
因此,如果您已经检查了您的库并且没有人对 JUnit 4 有更多依赖,那么您终于可以将所有测试迁移到 JUnit 5,对于此过程,有一个很好的工具可以帮助您节省大量工作,那就是OpenRewrite,一个源代码的自动重构生态系统,它们会将您所有的旧包、旧注释和所有内容更改为新包。
就是这样,伙计们,现在您和您的队友可以享受 JUnit 5 并放松心情,因为知道将使用 JUnit 5 创建新测试,并且该项目不会成为弗兰肯斯坦。所以,记住,保持你的项目是最新的,因为如果你忘记了你的库,每一天都会更难更新,总是使用规范,以及遵循规范的框架,并且在你的代码中有一个好的设计,这允许您随设施改变和移动。
Atas ialah kandungan terperinci JUnit, 4, 5, Musytari, Retro. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!