目前我正在测试一个获取对象的方法,并检查该对象是否是存储为实例变量的类的实例。到目前为止没问题。
但是在测试中我必须使用模拟,其中一个模拟是传递给该方法的对象。而现在,它变得棘手。让我们看看代码(我总结了这个测试中的代码):
Class<AdapterEvent> clazz = AdapterEvent.class;
AdapterEvent adapterEvent = Mockito.mock(AdapterEvent.class);
Assert.assertTrue(adapterEvent.getClass().equals(clazz));
Assert.assertTrue(adapterEvent.getClass().isAssignableFrom(clazz));
嗯,这个测试实际上失败了。有谁知道为什么?有人知道如何通过在测试中使用模拟来解决这个问题吗?是否有其他方法可以将对象与特定类进行比较。
非常感谢您的帮助。
最好的问候
了Gerardo
答案 0 :(得分:8)
你的第一个断言永远是真的--Mockito模拟是一个全新的类,所以一个简单的equals()
永远不会起作用。顺便说一句,对于这样的测试,如果你使用Assert.assertEquals()
,你会得到一个更有用的失败消息,其中第一个参数是预期的结果; e.g:
Assert.assertEquals(clazz, adapterEvent.getClass());
你的第二个断言会是正确的,但是你已经混淆了isAssignableFrom()
的方向(很容易做到,JavaDoc非常令人困惑) - 翻转它并且你是金色的:
Assert.assertTrue(clazz.isAssignableFrom(adapterEvent.getClass()));
答案 1 :(得分:2)
我认为instanceof会以你想要的方式工作:
Assert.assertTrue(adapterEvent instanceof AdapterEvent);
你确定你甚至应该为此测试吗?不知道你想要完成什么,很难说,但我认为这个测试可能没有必要。
答案 2 :(得分:2)
Mockito 2.0.0中有一个新方法getMockedType,它返回最初传递给Mockito.mock(Class)
的类。我建议使用此方法,因为getSuperClass()
技术并不适用于所有情况。
MockingDetails mockingDetails = Mockito.mockingDetails(mockObj);
Class<?> cls = mockingDetails.getMockedType();
答案 3 :(得分:1)
要测试对象已返回您期望的类的实例,请执行以下操作
Assert.IsInstanceOfType(adapterEvent, typeof(AdapterEvent));
答案 4 :(得分:0)
Mocked类是从原始类中继承的,所以只需检查超类,如下所示:
Assert.assertTrue(adapterEvent.getClass()getSuperclass之类()等于(clazz所));