2010-05-25 181 views
27

当我使用下面的测试中,我得到一个警告:JMockit - 初始化问题

警告:JMockit已于需求,这可能会导致某些测试失败初始化; 请检查文档以获得更新的初始化方法。

这是我的测试实行:

package test; 

import static mockit.Mockit.*; 
import junit.framework.TestCase; 
import mockit.*; 
import mockit.integration.junit4.*; 


import org.junit.*; 
import org.junit.runner.*; 

import filip.ClassUnderTest; 
import filip.LowerClass; 

@RunWith(JMockit.class) 
public class MockTest extends TestCase { 

    @MockClass(realClass = LowerClass.class) 
    public static class LowerClassMock { 
     @Mock(invocations = 1) 
     public String doWork() { 
      return "Mockowanie dziala :D"; 
     } 
    } 

    @Before 
    public void setUp() { setUpMocks(LowerClassMock.class); } 

    @After 
    public void tearDown() { tearDownMocks(); } 

    @Test 
    public void testJMockit() { 
     ClassUnderTest classUnderTest = new ClassUnderTest(); 

     classUnderTest.print(); 
    } 

} 

任何想法?

回答

15

据我所知,这个例外是thrown当一个人试图调用JMockit方法,而JMockit尚未正确初始化。

请务必遵循JMockit installation instructions,尤其是分3和4。如果JMockit罐子来在classpath中JUnit的罐子,它可能会导致问题。

+1

看来,使用eclipse内置juint库存在JMockit的一些问题。解决方案是添加外部和单独的JUnit jar。 – Filip 2010-05-26 08:52:48

+1

该接受答案中的JMockit安装说明链接已损坏! – fatuhoku 2012-08-14 15:32:08

+0

@FatuHoku谢谢。更新了链接。 – 2012-08-18 20:55:14

34

接受的答案在链接上已经有些过时了,所以值得一提的是直接提供的各种解决方案。

要解决此问题,请执行下列操作之一:

1 - Specifiy一个javaagent

添加到您的JUnit执行环境(对于您的版本):

-javaagent:path/to/your/jmockit/jmockit-0.998.jar 

2 - 在Maven中配置Surefire插件以避免它插入

以下添加到您的Maven配置(选择适合自己的版本)

<!-- JMockit must be before JUnit in the classpath --> 
<dependency> 
    <groupId>mockit</groupId> 
    <artifactId>jmockit</artifactId> 
</dependency> 
<!-- Standard unit testing --> 
<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
</dependency> 

确保您一定能成功的插件配置如下(为您的特定版本):

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.4.3</version> 
    <configuration> 
     <argLine>-javaagent:${settings.localRepository}/mockit/jmockit/0.998/jmockit-0.998.jar</argLine> 
     <useSystemClassLoader>true</useSystemClassLoader> 
    </configuration> 
</plugin> 

3 - 使用JUnit @RunWith注释

在每个测试c上添加此JUnit运行器注释LASS

@RunWith(JMockit.class) 
public class ExampleTest {} 
+0

我正在使用maven,因此我试图使用选项2.但是,尽管确保jmockit是我的pom中的第一个依赖项,并且将surefire插件配置为使用-javaagent argLine,但我仍然得到了“初始化按需“警告。我使用的是surefire 2.6和jmockit 0.999.4。有任何想法吗? – Greg 2011-01-07 04:47:50

+0

也许与选项3相结合? – 2011-01-07 10:37:31

+0

@GregInYEG,你有没有得到它的工作?我有同样的问题。 – Ilkka 2011-03-19 16:19:22

2

除了加里Rowe的solution

更健壮的(即版本和JMockit的仓库路径无关)集成到神火

<argLine>-javaagent:${org.jmockit:jmockit:jar} 

为了使这项决议的工作中,Maven的依赖,插件(版本> = 2.5.1!)需要进行配置是这样的:

<plugin> 
<artifactId>maven-dependency-plugin</artifactId> 
<version>2.5.1</version> 
<executions> 
    <execution> 
     <id>getClasspathFilenames</id> 
     <goals> 
      <goal>properties</goal> 
     </goals> 
    </execution> 
</executions> 

0

我只是说:

@RunWith(JMockit.class)

从而解决了这一问题,因为每个文档中的接受回答。

+0

这不适用于JUnitParams或任何其他需要RunWith的东西 – Novaterata 2017-07-10 16:10:09

0

它仍然没有运行在IntelliJ我。我能够运行它的命令行。