32

次のテストを使用すると、警告が表示されます。

警告: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();
    }

}

何か案は?

4

8 に答える 8

44

受け入れられた回答はリンクに関して少し古くなっているので、さまざまな解決策を直接言及する価値があります。

この問題を修正するには、次のいずれかを実行します。

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>

3-JUnit@RunWithアノテーションを使用します

このJUnitランナーアノテーションをすべてのテストクラスに追加します

@RunWith(JMockit.class)
public class ExampleTest {}
于 2010-12-06T17:12:35.927 に答える
20

私が理解しているように、この例外は、JMockitが適切に初期化されていないときにJMockitメソッドを呼び出そうとするとスローされます。

JMockitのインストール手順、特にポイント3と4に必ず従ってください。JMockitjarがクラスパスのJUnit jarの後にある場合、問題が発生する可能性があります。

于 2010-05-25T16:54:25.203 に答える
4

Gary Roweのソリューションに加えて:

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>

于 2015-03-11T09:06:17.087 に答える
1

JUnit 5を簡単に構成できるように、クラスパスにプロパティファイルを設定します。

junit-platform.propertiesという名前にする必要があります

junit.jupiter.extensions.autodetection.enabled = true
junit.jupiter.testinstance.lifecycle.default = per_class

JmockitExtensionクラスを持つ新しいバージョンのJmockitを使用していることを確認してください。注:Jmockitバージョン1.8はバージョン1.41より新しいものではありません。1.8バージョンは1.08である必要があります。

Mavenセントラルリファレンス: https ://mvnrepository.com/artifact/org.jmockit/jmockit

于 2018-08-01T16:32:07.240 に答える
0

私は単に追加しました:

@RunWith(JMockit.class)

受け入れられた回答のドキュメントに従って、これで問題が解決しました。

于 2017-05-07T11:37:06.727 に答える
0

IntelliJではまだ実行されません。ただし、コマンドラインで実行することはできます。

于 2017-08-16T08:26:55.527 に答える
0

Mavenでテストを実行するのに問題はありませんでしたが、Eclipseでテストを実行したときに同じエラーが発生しました。

JMockit Eclipseプラグインを使用すると、追加の構成なしですべてのテストをEclipseで実行できました。

https://marketplace.eclipse.org/content/jmockit-eclipse

このプラグインの特徴の1つは

JUnitの起動に-javaagent引数としてJMockitjarを自動的に追加します。

于 2020-02-25T02:08:41.313 に答える
0

VSCodeJMockitoエラーの場合-

java.test.configを含むsettings.jsonファイルを作成する必要があります。

そのファイルに追加:

"java.test.config": [
    {
        "name": "myConfiguration",
        "workingDirectory": "${workspaceFolder}",

        "vmargs": [ 
          "-Xmx512M", //this was here by default
          "-javaagent:/path/to/jmockito/" 
        ]
    ]
于 2021-06-04T15:43:22.903 に答える