perbedaan antara 2 kelas JUnit Assert


257

Kerangka kerja JUnit berisi 2 Assertkelas (dalam paket yang berbeda, jelas) dan metode pada masing-masing tampaknya sangat mirip. Adakah yang bisa menjelaskan mengapa ini?

Kelas yang saya maksud adalah: junit.framework.Assertdan org.junit.Assert.


8
Di Intellij IDEA, Anda dapat mengecualikan junit.framework.*dari dropdown impor statis di Editor->General->Auto Import->Exclude from Import and Completion.
jordanpg

Jawaban:


239

Metode lama (JUnit 3) adalah untuk menandai kelas-tes dengan memperluas junit.framework.TestCase. Itu mewarisi junit.framework.Assertsendiri dan kelas tes Anda memperoleh kemampuan untuk memanggil metode tegas dengan cara ini.

Sejak versi 4 JUnit, kerangka kerja ini digunakan Annotationsuntuk tes penandaan. Jadi Anda tidak perlu lagi memperpanjang TestCase. Tapi itu berarti, metode tegas tidak tersedia. Tetapi Anda dapat membuat impor statis Assertkelas baru . Itu sebabnya semua metode tegas di kelas baru adalah metode statis. Jadi Anda dapat mengimpornya dengan cara ini:

import static org.junit.Assert.*;

Setelah impor statis ini, Anda dapat menggunakan metode ini tanpa awalan.

Pada desain ulang mereka juga pindah ke paket baru org.junityang mengikuti lebih baik konvensi normal untuk penamaan paket.


6
Jawaban ini tidak sepenuhnya benar, Anda dapat membuat impor statis metode di kelas junit.framework.Assert dan org.junit.Assert. Namun, mungkin ide yang baik untuk tetap berpegang pada kelas org.junit.Assert karena lebih baru, sedikit ditulis ulang dan mungkin dimaksudkan sebagai pengganti.
Glenn Bech

75

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

Lebih suka yang terbaru, terutama ketika menjalankan JDK5 dan lebih tinggi dengan dukungan anotasi.


19

Sebenarnya ada perubahan fungsional: org.junit.Assertakan mengeluh jika Anda menggunakan dua argumen assertEquals()dengan floatatau double, sementara junit.framework.Assertakan diam-diam mengubahnya.


5

Saya percaya mereka refactoring dari junit.frameworkke org.junitdan junit.framework.Assertdipertahankan untuk kompatibilitas ke belakang.


3

Saya melakukan perbandingan kode sumber kasar dan tidak ada perubahan serius. Banyak komentar ditambahkan org.junit.Assertdan beberapa refactor dilakukan. Satu-satunya perubahan adalah perbandingan dengan Arrays. Ada beberapa pembersihan kode, tetapi (imho) tidak ada perubahan fungsional .


1
Saya percaya @ David Moles benar, dan ini akan menjadi perubahan fungsional.
orbfish

1

Di Android Studio (dan juga di IntelliJ), Anda dapat mengecualikan secara global junit.framework dari proposal impor otomatis.

Anda dapat mengatur ruang lingkup antara IDEatauProject . Jika Anda tidak memiliki proyek yang menggunakan JUnit 3, Anda dapat tetap menggunakan lingkup IDE dengan aman.

Pengaturan posisi:

Preferensi -> Editor -> Umum -> Impor Otomatis

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.