Tôi tự hỏi tại sao điều này không:assertTrue với "instanceof" vs assertEquals
assertEquals(Key.class, expectedKey.getClass());
và điều này không:
assertTrue(expectedKey instanceof Key);
Có một sự khác biệt thực sự giữa hai?
Tôi tự hỏi tại sao điều này không:assertTrue với "instanceof" vs assertEquals
assertEquals(Key.class, expectedKey.getClass());
và điều này không:
assertTrue(expectedKey instanceof Key);
Có một sự khác biệt thực sự giữa hai?
Vì expectedKey
là một phiên bản của một lớp con là của khóa, nhiều khả năng nhất. Thông báo lỗi bạn nhận được từ xác nhận không thành công sẽ cho bạn biết. Đọc nó.
"s"
, ví dụ: một thể hiện của java.lang.Object, nhưng lớp của nó không phải là java.lang.Object, nó là java.lang.String.
Vì expectedKey.getClass()
cung cấp đối tượng Class
loại thời gian chạy là expectedKey
, có thể khác với lớp Key
.
Tuy nhiên, với instanceof
, ngay cả khi expectedKey
kiểu thời gian chạy là một số lớp con của Key
lớp, kết quả sẽ là true
, vì một thể hiện của lớp con, cũng là một instanceof
siêu lớp.
expectedKey
là một lớp con của Key
lớp như tôi có thể nhìn thấy
assertTrue(expectedKey instanceof Key)
trở thành sự thật từ lớp expectedKey là một lớp con của lớp chính
Object.getClass
trả về tên lớp hoàn chỉnh của đối tượng đó vào thời gian chạy và do đó expectedKey.getClass
kết quả đầu ra ->ExpectedClass
và Key.getClass
kết quả đầu ra Key class itself
và assertEquals
tìm kiếm sự so sánh trong trường hợp của bạn như bên dưới .210 và cả hai đều khác nhau
do đó nó trả về false
Có sự khác biệt trong việc xử lý null
, quá. Các assertEquals
ném một NullPointerExeption
trong khi các assertTrue
chỉ đơn giản là không thành công.
Bạn có thể sử dụng Key.class.isInstance (expectedKey) – aalku