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

使用Mockito 1.9.5和DexMaker-Mockito-1.0验证错误

钮誉
2023-03-14

和许多其他人一样,我很兴奋地听到Mockito现在使用Android,并跟随本教程亲眼看到了它。一切似乎都很有趣,我开始将模拟解决方案纳入我的Android测试项目中。。。

但是,在设置我的应用程序的测试项目以利用mockito-all-1.9.5dexmaker-1.0dexmaker-mockito-1.0jars时,我遇到了我的第一个测试用例的问题。事实上正是这个问题。我想要帮助的部分是;

Caused by: java.lang.VerifyError: org/mockito/cglib/core/ReflectUtils
at org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167)
at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
at org.mockito.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:117)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:109)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:105)
at org.mockito.cglib.proxy.Enhancer.<clinit>(Enhancer.java:70)

我被告知,这“根本还不太管用”,因为堆栈跟踪意味着没有使用DexMaker jar——请参考此响应。然而,我怀疑我在项目设置方面做错了什么,所以我希望从这里的集体知识库中提取信息,看看这到底是用户错误还是测试版错误。

请在下面找到我的测试项目配置的截图。该项目是通过Android向导创建的,除了将Mockito和DexMaker JAR(如上所述)包含在libs目录下之外,没有其他特殊功能。

不管测试的内容(在执行单元测试之前测试失败),设置如下所述;

public class TestSpotRatingCalculator extends InstrumentationTestCase {
  @Mock
  private AService aService; // Changed the service names being used here - not important.
  @Mock
  private BService bService;
  @Mock
  private CService cService;
  @Mock
  private DService dService;

  /**
   * @see android.test.AndroidTestCase#setUp()
   */
  @Override
  protected void setUp() throws Exception {
    super.setUp();
    MockitoAnnotations.initMocks(this);  // Failure here with aforementioned stacktrace...
  }

如果有人知道哪里出了问题,请在这里发声。

共有3个答案

章学义
2023-03-14

我们只是在一个项目中遇到了同样的问题,但是我们的测试在一个真实的设备上也失败了。

原因被跟踪到Mockito如何使用类加载器,并在LogCat中导致以下错误:

W/ActivityThread(5777): ClassLoader.getResources: The class loader returned by Thread.getContextClassLoader() may fail for processes that host multiple applications. You should explicitly specify a context class loader. For example: Thread.setContextClassLoader(getClass().getClassLoader());

修复方法是在调用mock()测试之前显式设置类装入器,例如。

@Override
protected void setUp() throws Exception {
    super.setUp();
    Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
    fooImpl = mock(Foo.class)
}

Mockito中有问题的文件是:org。莫基托。内部的配置ClassPathLoader(1.9.5中的第121行)

席俊
2023-03-14

只需在渐变中添加以下内容:

androidTestCompile 'org.mockito:mockito-core:1.10.8'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.1'
司马宏邈
2023-03-14

嗨,我有同样的问题,我发现这篇文章真的很有用!

http://corner.squareup.com/2012/10/mockito-android.html

关键信息是:

要在设备或模拟器上使用Mockito,您需要添加三个。jar文件保存到测试项目的libs目录:mockito-all-1.9.5。jar,dexmaker-1.0。jar和dexmaker-mockito-1.0。罐子

 类似资料:
  • 我试图了解当使用不同的Microsoft Graph RESTendpoint和针对Azure1.0 oauthendpoint(隐式流)获得的访问令牌时,预期会失败什么(如果有的话)。例如,我在Azure AD tenant中创建了一个新的应用程序注册,添加了Microsoft Graph服务,并选择了每一个可用的权限--总共66个。我发现可以使用从https://login.windows.n

  • 我实际上是在努力做下面的事情:我的服务类 这让我想要的没有被调用,实际上与这个模拟没有任何交互。你知道我做错了什么吗??

  • 问题内容: 使用Mockito,我可以执行以下操作: 但是,如果要取而代之,我该怎么写呢?无法弄清楚如何正确编写。刚收到语法错误… 问题答案: 尝试: 实际上,当我键入IntelliJ时,它会自动建议此修复程序。不幸的是,在这种情况下,您不能使用静态导入。

  • 现在,我正在使用XSD进行XML验证。 由于我使用了SchemaFactory: 然后我尝试切换到apache xerces,得到这个错误(从导入xerces开始): 为什么在android studio中java.exe以值1退出

  • 我正在尝试测试,只有在调用case的情况下,否则不会调用该方法。 但这会调用我的,并在内抛出空指针。因为我的行为不会调用,所以我如何在不调用的情况下测试它。

  • 我正在使用Android Spring 1.0。1.(此处为API文档) 我有GET和POST(添加对象)事务与基本身份验证工作,但我如何做删除? 获取和发布看起来像这样: