2014-04-25 15 views
6

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?

+1

Bạn có thể sử dụng Key.class.isInstance (expectedKey) – aalku

Trả lời

7

expectedKey là một phiên bản của một lớp con 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.

5

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.

2

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 ->ExpectedClassKey.getClass kết quả đầu ra Key class itselfassertEquals 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

0

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.

Các vấn đề liên quan