次のテストを使用すると、警告が表示されます。
警告: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();
}
}
何か案は?
私が理解しているように、JMockitが適切に初期化されていないときにJMockitメソッドを呼び出そうとすると、この例外は throw になります。
JMockitのインストール手順 、特にポイント3と4に従ってください。JMockitjarが後に(== --- ==)後にクラスパスは、問題を引き起こす可能性があります。
受け入れられた回答はリンクに関して少し古くなっているので、さまざまな解決策を直接言及する価値があります。
この問題を解決するには、次のいずれかを実行します。
1-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>
Surefireプラグインが次のように構成されていることを確認します(特定のバージョンの場合)。
<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>
-JUnit @RunWithアノテーションを使用
このJUnitランナーアノテーションをすべてのテストクラスに追加します
@RunWith(JMockit.class)
public class ExampleTest {}
Gary Roweの solution に加えて:
JMockitのSurefireへのより堅牢な(つまり、バージョンとリポジトリパスにとらわれない)統合は、
<argLine>-javaagent:${org.jmockit:jmockit:jar}
この解決策を機能させるには、maven-dependency-plugin(バージョン> = 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>
IntelliJではまだ動作しません。コマンドラインでも実行できます。
Mavenでテストを実行するのに問題はありませんでしたが、Eclipseでテストを実行しているときに同じエラーが発生しました。
JMockit Eclipseプラグインを使用すると、追加の構成なしですべてのテストをEclipseで実行できます。
https://marketplace.Eclipse.org/content/jmockit-Eclipse
このプラグインの特長の1つは
JUnit起動の-javaagent引数としてJMockit jarを自動的に追加します。
JUnit 5を簡単に構成するために、クラスパスにプロパティファイルを設定します。
それは[〜#〜] [〜#〜]である必要がありますjunit-platform.properties
junit.jupiter.extensions.autodetection.enabled = true
junit.jupiter.testinstance.lifecycle.default = per_class
JmockitExtensionクラスを持つ新しいバージョンのJmockitを使用していることを確認してください。注:Jmockitバージョン1.8 ISバージョン1.41より新しいわけではありません。1.8バージョンは1.08でした。
Maven Centralリファレンス: https://mvnrepository.com/artifact/org.jmockit/jmockit
私は単に追加しました:
@RunWith(JMockit.class)
受け入れられた回答のドキュメントに従って、どちらが問題を解決しましたか。