当前位置: 首页 > 知识库问答 >
问题:

使用Mockito-core创建最终类的模拟?

夏青青
2023-03-14

我在github示例中发现了如何使用standart Mockito创建final类(BluetoOthgatt.class)实例:

...
@RunWith(RobolectricTestRunner.class)
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class OnBoardingServiceTest {

    private BluetoothGattCharacteristic characteristic;
    private OnBoardingService service;
    private BluetoothGattReceiver receiver = new BluetoothGattReceiver();

    @Before public void initialise() {
        BleDevice bleDevice = mock(BleDevice.class);
        when(bleDevice.getType()).thenReturn(BleDeviceType.WunderbarMIC);
        BluetoothGatt gatt = mock(BluetoothGatt.class);
...

但从Mockito常见问题:

Mockito的局限性是什么

  • 需要java 1.5+
  • 无法模拟最终类
  • ...

我检查了它是来自标准android-sdk的BluetoothGatt,所以它看起来像模拟的最终类。现在我尝试build project,以确保该测试工作正常。它如何使模拟最终类在这里与核心模拟?如果它的代码最终不能工作,你知道如何模拟最终类的android仪器测试吗?(我已经在尝试PowerMock)。谢谢

共有1个答案

汝吕恭
2023-03-14

Robolectric设计用于创建和替换Android标准类的实现,包括最终类和方法。实际上,它的工作方式与PowerMockito非常相似,它使用自己的类加载器来建立一个支持自己的模拟的类路径。

Robolectric中Android类的模拟实现被称为shadows,库不完整;您可能希望创建一个适合您需要的自定义阴影。

使用Mockito进行方法调用可能仍然不容易,但是您可以使用Robolectric方法获取shadow的实例,并编写shadow实现,将方法参数保存到实例中(以此类推)。

 类似资料:
  • 我正在将Powermock从我目前正在进行的项目中移除,因此我试图仅用Mockito(Mockito-Core-2.2.28)重写一些现有的unitary测试。 无法模拟/Spy类Com.ExternalPackagePath.ExternalClass Mockito无法模仿/监视,因为: 最终类 正如Mockito文档(https://github.com/Mockito/Mockito/wi

  • 我无法使用mockito2模拟一个Kotlin final类。另外我还在用Robolectric。 这是我的测试代码: 请注意,我使用的是Mockito Version2,我使用的是依赖项,它自动启用模拟最终类的功能。

  • 问题内容: 我刚刚开始模拟应用程序的不同层。我到了一个地步,我的一个模拟对象在调用最终类静态方法时返回NPE。有没有解决的办法? 例如 问题答案: 您必须同时使用PowerMock和Mockito。 我不明白您的代码段正在尝试做什么,但是以下代码段允许类的静态方法返回模拟的对象。也许这会为您指明正确的方向 在课堂上: 在您的测试方法中:

  • 问题内容: 我上了最后一堂课,像这样: 我在其他这样的班级中使用这个班级: 在我的JUnit测试类中,Seasons.java我想模拟RainOnTrees该类。我该如何使用Mockito做到这一点? 问题答案: 仅在Mockito v2中可以模拟最终/静态类/方法。 将此添加到你的gradle文件中: 使用Mockito常见问题解答中的 Mockito v1,这是不可能的: `What are

  • 我在一个maven项目中使用了mockito-core-2.7.21,它正按预期工作。 但是为了启用对final类的模拟,我在源文件夹下创建了一个文件并添加了文本。 按照https://www.baeldung.com/mockito-final以及Mock final class with mockito2,它应该允许我模拟final class,但当我运行junit测试时,我得到以下错误: J

  • 我在一次测试中试图使用一个模拟类,但出现了以下错误: 在pom中: (也试用了3.0.0版) 车辆等级: 测试类: