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.

Dónal
sumber
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.

Mnementh
sumber
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.

Rene
sumber
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.

David Moles
sumber
5

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

merah muda
sumber
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 .

guerda
sumber
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

MatPag
sumber