【问题标题】:Checking the class type of a mock object检查模拟对象的类类型
【发布时间】:2011-06-07 12:04:03
【问题描述】:

目前我正在测试一种获取对象并检查该对象是否是存储为实例变量的类的实例的方法。目前没问题。

但在测试中我必须使用模拟,其中一个模拟是传递给该方法的对象。而现在,它变得棘手。看代码(我在本次测试中总结了代码):

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

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

嗯,这个测试实际上失败了。有谁知道为什么?有人知道我如何通过在测试中仍然使用模拟来解决这个问题吗?是否有另一种方法可以将对象与特定类进行比较。

非常感谢您的帮助。

最好的问候

杰拉尔多

【问题讨论】:

  • 您可能希望接受以下答案之一(如果正确)。

标签: mocking mockito instanceof


【解决方案1】:

您的第一个断言将永远为真 - Mockito 模拟是一个全新的类,因此简单的 equals() 将永远无法工作。顺便说一句,对于像这样的测试,如果你使用Assert.assertEquals(),你会得到一个更有用的失败消息,其中第一个参数是预期的结果;例如:

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

您的第二个断言是正确的,但是您混淆了isAssignableFrom() 的方向(很容易做到,JavaDoc 非常混乱)- 把它翻过来,你就是金子:

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

【讨论】:

    【解决方案2】:

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

    Assert.assertTrue(adapterEvent instanceof AdapterEvent);
    

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这个语法已经改变,现在应该使用类似的东西:Mockito.mockingDetails(mockObj).getMockCreationSettings().getTypeToMock()
      【解决方案4】:

      要测试一个对象是否返回了您期望的 C# 类的实例,然后执行以下操作

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

      【讨论】:

      • 虽然这个答案可能会解决问题,但请始终添加解释。
      【解决方案5】:

      Mocked 类是原始类的子类,因此只需检查超类,如下所示:

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

      【讨论】:

      • 更好的是使用Assert.assertEquals(clazz, adapterEvent.getClass().getSuperclass());。然后,当测试失败时,您会收到更有用的错误消息。
      猜你喜欢
      • 1970-01-01
      • 2015-10-06
      • 2021-10-31
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      相关资源
      最近更新 更多