的Andr​​oid + Powermock + +的Mockito Maven构建与ClassNotFoundException的错误 [英] Android + Powermock + Mockito + Maven build error with ClassNotFoundException

查看:692
本文介绍了的Andr​​oid + Powermock + +的Mockito Maven构建与ClassNotFoundException的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

I'm面临powermock和使用的Mockito Maven的一个奇怪的构建问题。我可以完美运行wihtin ecplise测试(wihtout使用maven)。但是,当我尝试运行从CLI或构建服务器我得到下面的异常Maven的测试:

I´m facing a strange build problem with powermock and mockito using maven. I can perfectly run the tests wihtin ecplise (wihtout using maven). But when i try to run the test with maven from cli or on the build server i get the following exception:

在错误的测试:
  测试机制:抛出java.lang.ClassNotFoundException:org.mockito.internal.progres
s.ThreadSafeMockingProgress

Tests in error: Test mechanism: java.lang.ClassNotFoundException: org.mockito.internal.progres s.ThreadSafeMockingProgress

我的单元测试是这样的:

My unit test looks like this:

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.when;

import java.io.IOException;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import android.util.Log;

import com.generic_io.concurrent.ResultReceiverCallableFactory;


@RunWith(PowerMockRunner.class)
@PrepareForTest({
    Log.class
})
public class TestPowerMockTest
{

    @Mock
    ResultReceiverCallableFactory callableFactory;

    @Before
    public void setUp() throws IOException
    {
        mockLogger();
    }


    private void mockLogger()
    {
        PowerMockito.mockStatic(Log.class);
        when(Log.d(anyString(), anyString())).thenAnswer(new Answer<Integer>()
        {

            @Override
            public Integer answer(final InvocationOnMock invocation) throws Throwable
            {
                final String tag = (String) invocation.getArguments()[0];
                final String msg = (String) invocation.getArguments()[1];
                System.out.println("[" + tag + "] " + msg);
                return 0;
            }
        });

    }


    @Test
    public void testPreconditions()
    {
        assertThat("ResultReceiverCallableFactory is null", callableFactory, is(notNullValue()));
    }
}

我的pom.xml看起来是这样的:

My pom.xml looks like this:

<dependencies>
    <dependency>
      <groupId>com.google.android</groupId>
      <artifactId>android</artifactId>
      <version>2.2.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>com.generic_io</groupId>
      <artifactId>generic_io</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>jar</type>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>com.pivotallabs</groupId>
      <artifactId>robolectric</artifactId>
      <version>1.0-RC1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <type>jar</type>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-api-mockito</artifactId>
      <version>1.4.9</version>
      <type>jar</type>
       <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-module-junit4</artifactId>
      <version>1.4.9</version>
      <type>jar</type>
       <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.8.5</version>
        <type>jar</type>
        <scope>test</scope>
    </dependency>

     <dependency>
      <groupId>net.sourceforge.cobertura</groupId>
      <artifactId>cobertura</artifactId>
      <version>1.9.4.1</version>
    </dependency>

  </dependencies>

当从CLI构建我得到以下错误:

When building from CLI i get the following error:

Tests in error:
  Test mechanism: java.lang.ClassNotFoundException: org.mockito.internal.progres
s.ThreadSafeMockingProgress

任何人有一个想法,为什么我得到这个错误?帮助是非常AP preciated ...

Anyone has an idea why i get this error? Help is very much appreciated...

推荐答案

您需要Dexmaker添加到您的依赖关系是这样的:

You need to add Dexmaker to your dependencies like this :

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.9.5</version>
    </dependency>
    <dependency>
        <groupId>com.google.dexmaker</groupId>
        <artifactId>dexmaker</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>com.google.dexmaker</groupId>
        <artifactId>dexmaker-mockito</artifactId>
        <version>1.0</version>
    </dependency>

不过,我认为这不是Powermock工作。这帖子可以帮助你。

这篇关于的Andr​​oid + Powermock + +的Mockito Maven构建与ClassNotFoundException的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆