mockito 检查模拟对象的类类型

vu8f3i0k  于 2022-11-08  发布在  其他
关注(0)|答案(5)|浏览(153)

我正在测试一个方法,它获取一个对象,并检查该对象是否是一个类的示例,该示例是作为示例变量存储的。
但是在测试中我必须使用mock,而其中一个mock就是传递给那个方法的对象。现在,这就变得棘手了。让我们看看代码(我在这个测试中总结了代码):

Class<AdapterEvent> clazz = AdapterEvent.class;
AdapterEvent adapterEvent = Mockito.mock(AdapterEvent.class);

Assert.assertTrue(adapterEvent.getClass().equals(clazz));
Assert.assertTrue(adapterEvent.getClass().isAssignableFrom(clazz));

这个测试实际上失败了。有人知道为什么吗?有人知道我怎么解决这个问题吗?在测试中仍然使用一个mock?有没有可能有其他的方法来比较对象和一个特定的类。

bwntbbo3

bwntbbo31#

您的第一个Assert * 永远 * 不会为真- Mockito模拟是一个全新的类,因此简单的equals()永远不会起作用。例如:

Assert.assertEquals(clazz, adapterEvent.getClass());

您的第二个Assert * 应该 * 是正确的,但是您混淆了isAssignableFrom()的方向(很容易做到,JavaDoc非常令人困惑)--将其颠倒过来,您就成功了:

Assert.assertTrue(clazz.isAssignableFrom(adapterEvent.getClass()));
ncgqoxb0

ncgqoxb02#

我认为instanceof会按照您希望方式工作:

Assert.assertTrue(adapterEvent instanceof AdapterEvent);

你确定你应该为此进行测试吗?不知道你想完成什么,这很难说,但我认为这个测试可能没有必要。

rekjcdws

rekjcdws3#

在Mockito 2.0.0中有一个新的方法getMockedType,它返回最初传入Mockito.mock(Class)的类。我建议使用这个方法,因为getSuperClass()技术并不是在所有情况下都有效。

MockingDetails mockingDetails = Mockito.mockingDetails(mockObj);
Class<?> cls = mockingDetails.getMockedType();
s5a0g9ez

s5a0g9ez4#

若要测试一个对象是否返回了C#中您所期望的类的示例,请执行以下操作

Assert.IsInstanceOfType(adapterEvent, typeof(AdapterEvent));
tuwxkamq

tuwxkamq5#

Mocked类是原始类的子类,因此只需检查超类,如下所示:
如果是这样的话,那么就可以使用以下方法:

相关问题