sự khác biệt giữa 2 lớp JUnit Assert


257

Khung công tác JUnit chứa 2 Assertlớp (rõ ràng là trong các gói khác nhau) và các phương thức trên mỗi lớp có vẻ rất giống nhau. Bất cứ ai có thể giải thích tại sao điều này là?

Các lớp tôi đang đề cập đến là: junit.framework.Assertorg.junit.Assert.


8
Trong Intellij IDEA, bạn có thể loại trừ junit.framework.*khỏi danh sách nhập tĩnh Editor->General->Auto Import->Exclude from Import and Completion.
jordanpg

Câu trả lời:


239

Phương thức cũ (của JUnit 3) là đánh dấu các lớp kiểm tra bằng cách mở rộng junit.framework.TestCase. Điều đó được thừa hưởng junit.framework.Assertchính nó và lớp thử nghiệm của bạn đã đạt được khả năng gọi các phương thức khẳng định theo cách này.

Kể từ phiên bản 4 của JUnit, khung sử dụng Annotationsđể đánh dấu các bài kiểm tra. Vì vậy, bạn không còn cần phải gia hạn TestCase. Nhưng điều đó có nghĩa là, các phương pháp khẳng định không có sẵn. Nhưng bạn có thể thực hiện nhập tĩnh của Assertlớp mới . Đó là lý do tại sao tất cả các phương thức khẳng định trong lớp mới là các phương thức tĩnh. Vì vậy, bạn có thể nhập nó theo cách này:

import static org.junit.Assert.*;

Sau khi nhập tĩnh này, bạn có thể sử dụng phương thức này mà không cần tiền tố.

Khi thiết kế lại, họ cũng chuyển sang gói mới org.junittuân theo các quy ước thông thường để đặt tên gói.


6
Câu trả lời này không hoàn toàn chính xác, bạn có thể thực hiện nhập khẩu tĩnh các phương thức trong lớp junit.framework.Assert và org.junit.Assert. Tuy nhiên, có lẽ là một ý tưởng tốt để gắn bó với lớp org.junit.Assert vì nó mới hơn, được viết lại một chút và có lẽ có nghĩa là một sự thay thế.
Glenn Bech

75

JUnit 3.X: junit.framework.Assert

JUnit 4.X: org.junit.Assert

Thích cái mới nhất, đặc biệt là khi chạy JDK5 trở lên với sự hỗ trợ chú thích.


19

Thực tế, có một sự thay đổi về chức năng: org.junit.Assertsẽ khiếu nại nếu bạn sử dụng hai đối số assertEquals()với floathoặc double, trong khi junit.framework.Assertsẽ âm thầm tự động hóa nó.


5

Tôi tin rằng họ đang tái cấu trúc từ junit.frameworkđến org.junitjunit.framework.Assertđược duy trì để tương thích ngược.


3

Tôi đã làm một so sánh mã nguồn thô và không có thay đổi nghiêm trọng. Rất nhiều ý kiến ​​đã được thêm vào org.junit.Assertvà một số tái cấu trúc được thực hiện. Sự thay đổi duy nhất là so sánh với Arrays. Có một số dọn dẹp mã, nhưng (imho) không có thay đổi chức năng .


1
Tôi tin rằng @David Moles là chính xác, và đây sẽ là một thay đổi chức năng.
orbfish

1

Trong Android Studio (và trong IntelliJ cũng vậy), bạn có thể loại trừ toàn cầu junit.frameworkkhỏi đề xuất nhập tự động.

Bạn có thể đặt phạm vi giữa IDEhoặc Project. Nếu bạn không có các dự án sử dụng JUnit 3, bạn có thể ở lại với phạm vi IDE một cách an toàn.

Vị trí cài đặt:

Tùy chọn -> Trình chỉnh sửa -> Chung -> Tự động nhập

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.