Hôm nay tôi thấy một trường hợp thử nghiệm JUnit với xác nhận java thay vì xác nhận JUnit — Có lợi thế hay bất lợi đáng kể nào để ưu tiên cái khác không?khẳng định so với JUnit Assertions
Trả lời
Trong JUnit4 ngoại lệ (thực sự Lỗi) được ném bởi xác nhận JUnit cũng giống như lỗi được ném bởi từ khóa java assert
(AssertionError), vì vậy nó giống hệt như assertTrue
và khác với dấu vết ngăn xếp bạn không thể ' t nói sự khác biệt. Điều đó đang được nói, khẳng định phải chạy với một lá cờ đặc biệt trong JVM, khiến nhiều kiểm tra xuất hiện chỉ vì ai đó quên cấu hình hệ thống với cờ đó khi các kiểm tra JUnit được chạy - không tốt. Nói chung, vì lý do này, tôi cho rằng sử dụng JUnit assertTrue
là thực hành tốt hơn, vì nó đảm bảo chạy thử, đảm bảo tính nhất quán (đôi khi bạn sử dụng assertThat
hoặc các xác nhận khác không phải là từ khóa java) và nếu hành vi của xác nhận JUnit sẽ thay đổi trong tương lai (chẳng hạn như hooking vào một số loại bộ lọc hoặc tính năng JUnit khác trong tương lai), mã của bạn sẽ có thể tận dụng điều đó.
Mục đích thực sự của từ khóa khẳng định trong java là có thể tắt nó mà không bị phạt thời gian chạy. Điều đó không áp dụng cho các bài kiểm tra đơn vị.
Tôi thích xác nhận JUnit hơn vì chúng cung cấp API phong phú hơn tuyên bố được xây dựng trong assert
và, quan trọng hơn không cần phải được bật rõ ràng không giống như assert
, yêu cầu đối số JVM -ea
.
'-ea' luôn được bật trong' mvn test', không cần '-ea'. Api mạnh hơn, bắt tốt. Đôi khi tôi nghĩ rằng API bị lạm dụng trong thử nghiệm bởi vì nó không phải là một phần của ứng dụng (một api), tôi thích gọi nó chỉ là phương pháp phong phú hơn. –
Tôi sẽ nói nếu bạn đang sử dụng JUnit, bạn nên sử dụng xác nhận JUnit. assertTrue()
về cơ bản giống như assert
, Nếu không thì tại sao lại sử dụng JUnit?
Bạn sẽ sử dụng JUnit cho khung chạy thử nghiệm. Asserts thực sự là một phần nhỏ của giá trị mà JUnit cung cấp cho bạn. JUnit không có 'Assert' sẽ yêu cầu thêm bản mẫu. 'khẳng định' mà không có JUnit sẽ yêu cầu bạn viết toàn bộ khung công tác. – Yishai
Tôi đã nói nhiều hơn nếu bạn định sử dụng công cụ này, SỬ DỤNG CÔNG CỤ. các câu lệnh khẳng định cũ thường có vẻ ngớ ngẩn trong các trường hợp kiểm tra JUnit. Họ thuộc về với mã thực tế theo ý kiến của tôi. – CheesePls
@CheesePls "báo cáo xác nhận cũ thường xuyên" thực tế là gần đây hơn xác nhận JUnit. – dolmen
Điều này có thể không áp dụng nếu bạn chỉ sử dụng những thứ sáng bóng và mới, nhưng khẳng định không được đưa vào Java cho đến 1.4SE. Vì vậy, nếu bạn phải làm việc trong một môi trường với công nghệ cũ hơn, bạn có thể dựa vào JUnit vì các lý do tương thích.
Khi thử nghiệm không thành công, bạn sẽ nhận được nhiều thông tin hơn.
assertEquals(1, 2);
kết quả trong java.lang.AssertionError: expected:<1> but was:<2>
vs
assert(1 == 2);
kết quả trong java.lang.AssertionError
bạn có thể nhận được thông tin thậm chí nhiều hơn nếu bạn thêm tham số thông điệp tới assertEquals
thử 'assert 1 == 2:" 1 không phải là 2 ";'. –
@PeterRader Hãy thử từ khóa khẳng định khi -ea không được kích hoạt. Hoặc tốt hơn, hãy sử dụng các xác nhận JUnit luôn hoạt động. –
@ThomasW khi -ea không được bật không phải là thử nghiệm. Các xác nhận JUnit không phải lúc nào cũng hoạt động, chúng chỉ hoạt động nếu bạn quyết định sử dụng JUnit một khung làm việc là gì, và trong trường hợp maven phụ thuộc maven, một phụ thuộc maven phải nằm trong phạm vi kiểm tra. Chúng tôi có hai mặt ở đây: Bạn thích gì hơn? ** Đầu tiên **: Sử dụng khung làm phụ thuộc vào phạm vi thử nghiệm, phải được tải xuống, nhật thực cho phép bạn sử dụng trong các lớp không nằm trong thư mục src/main nhưng không biên dịch ở đó vì maven có junit chỉ trong phạm vi kiểm tra hoặc ** Mặt thứ hai **: Sử dụng công cụ dựng sẵn. –
tôi muốn nói sử dụng JUnit khẳng định trong các trường hợp thử nghiệm và sử dụng xác nhận của java trong mã. Nói cách khác, mã thực sẽ không bao giờ có các phụ thuộc JUnit, như là hiển nhiên, và nếu nó là một thử nghiệm, nó nên sử dụng các biến thể JUnit của nó, không bao giờ là khẳng định.
- 1. Junit không tạo báo cáo nếu có lỗi khẳng định
- 2. Mở rộng lớp với mới XUnit Khẳng định khẳng định
- 3. JUnit 4 so sánh Bộ sưu tập
- 4. Làm thế nào thực hiện JUnit để in khẳng định và kết quả
- 5. Khẳng định IEnumerables
- 6. Python unittest - khẳng định từ điển với danh sách
- 7. Làm cách nào để khẳng định rằng hai giá trị HashMap với Javabean là như nhau?
- 8. pytest: khẳng định gần như bằng
- 9. khẳng định không chứa mục
- 10. SWI-Prolog - Không phù hợp với Khẳng định
- 11. Go loại khẳng định chuyển đổi
- 12. Có thể "khẳng định" trong Puppet không?
- 13. thử nghiệm và báo cáo khẳng định
- 14. Từ khóa khẳng định trong java
- 15. Boost coroutine khẳng định thất bại
- 16. Khẳng định sự kiện tải ảnh Javascript
- 17. Chậm NUnit Khẳng định thẩm nhắn
- 18. "% s"% định dạng so với "{0}". Định dạng() so với "?" định dạng
- 19. tạo POM với junit 4
- 20. Sự khác biệt giữa hoảng loạn và khẳng định là gì?
- 21. Có cách nào để so sánh hai con trỏ void để khẳng định cùng loại trong C?
- 22. khẳng định kiểm tra trong một lambda trong python
- 23. Khi nào nên khẳng định() được sử dụng?
- 24. phpunit tùy chỉnh khẳng định sự giúp đỡ cần thiết
- 25. Junit4 + mùa xuân 2.5: Khẳng định ném "NoClassDefFoundError"
- 26. Gỡ lỗi khẳng định "Chỉ thị định dạng không hợp lệ" cho std :: put_time
- 27. SpringJUnit4ClassRunner với lỗi JUnit testsuite
- 28. Ý nghĩa của GLib-GIO-QUAN TRỌNG lỗi khẳng định
- 29. Sự khác biệt giữa khẳng định và static_assert là gì?
- 30. C++ khẳng định việc triển khai trong assert.h
Tôi nghĩ câu hỏi này nên được mở cửa trở lại: câu trả lời hàng đầu cực kỳ hữu ích. – jakebeal
Có sự khác biệt thực sự hoàn toàn giữa xác nhận JUnit và từ khóa 'khẳng định' Java. Đây không phải là một câu hỏi dựa trên ý kiến. –