Tôi đã thử junit khẳng định hai đối tượng đôi với những điều sau đây:Junit chênh lệch giữa assertEquals (Double, Double) và assertEquals (double, double, đồng bằng)
Assert.assertEquals(Double expected, Double result);
Đây là là tốt sau đó tôi quyết định thay đổi nó để sử dụng nguyên thủy đôi thay vì hóa ra là không được chấp nhận trừ khi bạn cũng cung cấp một delta.
vì vậy những gì tôi tự hỏi là sự khác biệt giữa việc sử dụng đối tượng Đôi hoặc kiểu nguyên thủy trong assertEquals này là gì? Tại sao sử dụng các đối tượng mà không có một đồng bằng ok nhưng sau đó sử dụng các nguyên thủy mà không có một đồng bằng không được chấp nhận? Java có đang thực hiện điều gì đó trong nền mà đã có một giá trị delta mặc định được tính đến không?
Cảm ơn.
+1 mở lại hộp thư, vâng, với báo trước rằng bạn sẽ có hành vi hơi khác một chút nếu một hoặc Đôi khác là rỗng. Với Object, bạn sẽ nhận được một thông điệp tốt đẹp, với delta, bạn sẽ nhận được một NullPointerException. –
Trải nghiệm của tôi là các phương pháp này không hoạt động tốt cho các số rất lớn trong một số trường hợp, đặc biệt nếu dữ liệu của bạn thay đổi theo đơn đặt hàng của cường độ. Hai số có thể có một lỗi phần trăm rất nhỏ, nhưng yêu cầu một đồng bằng dường như lớn để phù hợp. Nhưng đồng bằng đó sẽ không hoạt động với nhiều giá trị nhỏ hơn trong dữ liệu của bạn. Trong một số trường hợp, ngay cả những con số rất lớn có thể được mong đợi để khớp với gần như tất cả các chữ số có nghĩa. Trong các trường hợp khác, chẳng hạn như khi so sánh hai thuật toán FFT được tối ưu hóa, điều đó ít có khả năng hơn nhiều. Một phương pháp mạnh mẽ hơn là hạn chế lỗi tương đối. – orodbhen
@orodbhen Để làm cho nó hoạt động, ta nên tính toán delta dựa trên số mũ của giá trị mong đợi, vì vậy nếu 'double e' là giá trị mong đợi, thì delta phải là' double d = Math.pow (10, Math.log10 (Math. abs (e)) - 12), 'trong đó' 12' là số chữ số có nghĩa thực tế tối đa. Nếu bạn nhân log10 với giá trị <1.0, thì phép thử sẽ thất bại với 'e' có số mũ dương lớn và ngược lại, nếu bạn nhân log10 theo giá trị> 1.0, nó sẽ thất bại cho' e' có số mũ âm lớn - và đây là hiệu ứng bạn đang viết. Vì vậy, hãy đảm bảo delta phù hợp với số mũ của giá trị mong đợi. – Cromax