2010-05-25 179 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我。我能夠運行它的命令行。