Có công cụ/thư viện nào có thể tự động tạo các thử nghiệm cho hashcode của tôi và bằng các phương pháp xem xét các biến mẫu liên quan đến các phương thức này không?Tạo các bài kiểm tra đơn vị cho các phương thức hashcode, equals và toString
Trả lời
Ổi sử dụng this trình tạo thử nghiệm để kiểm tra equals
và hashCode
.
toString()
không nên có bất kỳ "hợp đồng" nào để tôn trọng, do đó, việc kiểm tra đơn vị sẽ rất lạ và không hữu ích.
Bạn có thể xem điều này project liên quan đến equals()
.
Ngoài ra còn có một JUnit Addon EqualsHashCodeTestCase
Cùng chủ đề:
Tôi không thấy lý do tại sao toString không thể có thông số kỹ thuật, mặc dù tôi chưa bao giờ tự kiểm tra đơn vị. –
Vâng, tôi đã không nói rằng nó không thể nhưng nó không nên.'toString()' là biểu diễn String của một đối tượng để người đọc có thể đọc được (xem javadoc for Object), vì vậy điều này nói rằng về cơ bản nó không nên làm bất cứ điều gì "cực đoan" (đó là biểu diễn của đối tượng, chứ không phải phương thức kinh doanh) và nó trả về một String được đọc bởi một con người, không được phân tích cú pháp. Từ đó thật dễ dàng để nói rằng 'toString' không nên được kiểm tra đơn vị (không phải là" không thể "hoặc" shan't "). –
Có, nếu bạn đang kiểm tra chăn tất cả các lớp thì điều đó không có ý nghĩa. Do lưu ý rằng nó vẫn là hợp pháp đối với một lớp cụ thể làm cho một yêu cầu chặt chẽ hơn về 'toString'. Có khá nhiều ví dụ trong chính JSE ('StringWriter',' StringBuilder', 'URL', ...). –
Bạn có thể sử dụng Apache EqualsBuilder và HashCodeBuilder để thực thi equals và hashCode và do đó giảm thiểu rủi ro không thực hiện đúng cách.
Kiểm tra bằng đơn giản, tạo hai trường hợp với giá trị mẫu giống nhau (theo đó bạn sẽ mong đợi bằng nhau) và gọi equals trên một đối tượng truyền tham số kia dưới dạng tham số và bạn sẽ mong đợi nó trả về true: D
Câu hỏi là, làm thế nào bạn có thể kiểm tra rằng hợp đồng hashCode không bị hỏng. Làm thế nào nên thực hiện một thử nghiệm, mà kiểm tra sau hai điều: 1. Nếu bằng trả về true, sau đó hashCode phải trả về cùng một giá trị. 2. Nếu hashCode trả về các giá trị khác nhau, thì bằng nhau phải trả về false. – mentallurg
EqualsVerifier là một thư viện tuyệt vời. Tôi thường kết hợp nó với thư viện Reflections để tự động quét các lớp nhất định và kiểm tra hợp đồng cho tất cả chúng cùng một lúc:
@Test
public void validateEqualsHashCodeToString() {
final Reflections dtoClassesReflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage("my.base.package"))
.filterInputsBy(new FilterBuilder()
.include(".*Dto.*") // include all Dto classes
.exclude(".*Test.*")) // exclude classes from tests which will be scanned as well
.setScanners(new SubTypesScanner(false)));
final Set<Class<?>> allDtoClasses = dtoClassesReflections.getSubTypesOf(Object.class);
allDtoClasses.forEach(dtoClass -> {
logger.info("equals/hashCode tester testing: " + dtoClass);
EqualsVerifier.forClass(dtoClass).verify();
try {
dtoClass.getDeclaredMethod("toString");
} catch (NoSuchMethodException e) {
fail(dtoClass + " does not override toString() method");
}
});
}
- 1. hashcode() và equals() phương pháp
- 2. Tạo tài liệu từ các bài kiểm tra đơn vị
- 3. Tạo các Bài kiểm tra Đơn vị Tự động
- 4. Làm thế nào một đơn vị nên kiểm tra hợp đồng hashCode-equals?
- 5. HashSet trong các bài kiểm tra đơn vị
- 6. hashCode và equals cho Collections.unmodifiableCollection()
- 7. Sử dụng assertArrayEquals trong các bài kiểm tra đơn vị
- 8. Global.asax cho bài kiểm tra đơn vị?
- 9. Maven - các bài kiểm tra tích hợp riêng biệt từ các bài kiểm tra đơn vị
- 10. Đếm phương thức đếm trong các bài kiểm tra Đơn vị
- 11. Cách triển khai phương thức hashCode và equals
- 12. Tạo phương thức hashCode() - Java
- 13. Tạo bằng equals/hashcode/toString bằng cách sử dụng chú thích
- 14. Làm cách nào để đơn vị kiểm tra các phương thức trong đối tượng phương thức?
- 15. Bài kiểm tra đơn vị cơ bản so với bài kiểm tra đơn vị
- 16. Sử dụng StructureMap với các bài kiểm tra đơn vị
- 17. Resharper vấn đề với các bài kiểm tra đơn vị
- 18. Công cụ để tự động tạo các bài kiểm tra đơn vị cho C++?
- 19. Tham số các bài kiểm tra đơn vị trong python
- 20. Làm thế nào để tạo các bài kiểm tra đơn vị cho NServiceBus Saga?
- 21. Thực hành tốt nhất cho các bài kiểm tra đơn vị, đối tượng giả, và ioc
- 22. Kiểm tra đơn vị trong QTestLib - chạy thử nghiệm/kiểm tra đơn trong lớp/tất cả các bài kiểm tra
- 23. Cách tạo phương thức equals() và hashcode() bằng cách sử dụng wsimport trong jaxws
- 24. Kiểm tra đơn vị - Có phải là hình thức không tốt để thử nghiệm đơn vị gọi các bài kiểm tra đơn vị khác
- 25. Bài kiểm tra đơn vị bằng Python
- 26. Tạo các bài kiểm tra đơn nhất trong Spring 3
- 27. zookeeper nhúng cho bài kiểm tra đơn vị/tích hợp
- 28. Cách cung cấp các tệp dữ liệu cho các bài kiểm tra đơn vị android
- 29. Sử dụng các kịch bản Luồng cho cả các bài kiểm tra tích hợp và các bài kiểm tra đơn vị
- 30. Makefile cho bài kiểm tra đơn vị trong C++
Bạn đang sử dụng IDE nào? – buymypies
Các thử nghiệm như vậy không có ý nghĩa quan trọng, nhưng chủ yếu là giới thiệu bảo trì. –
@MPlatvoet Tôi không thực sự đồng ý với bạn, kiểm tra 'equals()' và 'hashcode()' có thể quan trọng đặc biệt nếu một số mã của bạn dựa nhiều vào đó ('HashMap', kiểm tra bình đẳng liên quan đến thừa kế) –