JMockit+JUnit單元測試初始化問題

1、項目環境:java

WIN7 64位,Eclipse 4.2,JDK1.6,JUnit 4.11,JMockit 1.10apache

 

2、示例代碼:app

import static org.junit.Assert.*;

import org.junit.runner.RunWith;

import cn.open.dao.AppDao;
import cn.open.ddl.App;
import cn.open.service.AppService;
import mockit.Expectations;
import mockit.Mocked;
import mockit.integration.junit4.JMockit;

public class Test {

    @Mocked AppDao unused = null;
    
    @org.junit.Test
    public void test() {
        final App app = new App();
        app.id = 22;
        app.adStatus = 1;
        app.appName = "hello";
        
        new Expectations() {
            {
                AppDao.findById(anyInt);
                result = app;
            }
        };
        
        App re = AppService.get(1);
        assertEquals(app, re);
    }
}

 

 

 

使用JUnit + JMockit進行單元測試,運行JUnit Case時,拋出如下錯誤:eclipse

java.lang.IllegalStateException: JMockit wasn't properly initialized; check that jmockit.jar precedes junit.jar in the classpath (if using JUnit; if not, check the documentation)
    at cn.uc.appstore.open.Test$1.<init>(Test.java:26)
    at cn.uc.appstore.open.Test.test(Test.java:26)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)maven

 

3、解決方法:單元測試

1. 添加如下JUnit運行環境參數:測試

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

 

 

2. 配置Maven插件繞過該問題:   spa

JMockit必定要在JUnit以前:插件

<!-- 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>

 

確保插件已配置:code

<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. 使用@RunWith註解

@RunWith(JMockit.class)
public class Test {}

 

 

4、結論

解決方法1,3通過測試可以解決上述錯誤,解決方法2未測試。

 

5、參考

1. StackOverflow

2. JMockit Tutorial 中文

相關文章
相關標籤/搜索