【问题标题】:Mock android.content.res.Configuration with mockito用 mockito 模拟 android.content.res.Configuration
【发布时间】:2019-08-16 16:42:51
【问题描述】:

当我模拟 Configuration 时,我得到一个异常,而在模拟其他类(如资源)时我没有得到。

Configuration configuration = mock(Configuration.class);

org.mockito.exceptions.base.MockitoException: 
ClassCastException occurred while creating the mockito proxy :
  class to mock : 'android.content.res.Configuration', loaded by classloader : 'org.robolectric.internal.bytecode.InstrumentingClassLoader@57fffcd7'
  created class : 'android.content.res.Configuration$$EnhancerByMockitoWithCGLIB$$78c79839', loaded by classloader : 'org.mockito.internal.creation.util.SearchingClassLoader@e344ad3'
  proxy instance class : null
  instance creation by : ObjenesisInstantiator

You might experience classloading issues, disabling the Objenesis cache *might* help (see MockitoConfiguration)

我对 mockitoi 不是很熟悉,谁能告诉我如何正确模拟 Configuration 类?

【问题讨论】:

  • 试试Configuration configuration = Mockito.mock(Configuration.class);
  • @a_local_nobody 谢谢,但同样的错误。
  • 发现了其他一些使用该语法的 SO 帖子,因此认为它可能会有所帮助,可能只是库的错误

标签: java android mockito


【解决方案1】:

正如他们所说的

'禁用 Objenesis 缓存可能会有所帮助'

您可以创建覆盖 MockitoConfiguration。 这样做

在你的 src/test/java 下创建一个名为 org.mockito.configuration 的包 编写MockitoConfiguration

类文件

package org.mockito.configuration;

public class MockitoConfiguration extends DefaultMockitoConfiguration {

  @Override
  public boolean enableClassCache() {
    return false;
  }
}

【讨论】:

    【解决方案2】:

    根据thisandroid.content.res.Configuration是一个final类。

    Mockito 通常无法模拟最终课程。您可能想改用PowerMockito


    编辑:
    根据这个answermockito 有一个我不知道的选择加入功能。可能值得一试。


    但是,由于PowerMockito 有同样的问题,可能是完全阻止它工作的其他东西。

    【讨论】:

    • PowerMockito.mock(Configuration.class); 给出了同样的错误。
    • 您在@PrepareForTest 注释中添加了正确的类并使用了正确的Runner?如果您可以使用 PowerMockito 在您的问题中添加minimal reproducible example
    • 另请注意,roboelectrics 的类加载器和 powermockito 和/或 mockito 正在使用的类加载器存在一些问题,因此这可能只是已知问题的变体。
    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2020-11-29
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多