これは、このoneの後続の質問です。モキトモッキングを防ぐ方法...動的に?
私の環境はJUnit、Mockitoの新しいバージョンにアップグレードしました...残念ながら、最新のIBM JREを使用してローカルテストを実行していました。
Mockitoこのクラスをモックすることはできません:インタフェースjava.utilのその後、我々は我々のビルド環境の中で、私たちのすべてのMockitoのテストは今
org.mockito.exceptions.base.MockitoExceptionで失敗していることが判明しました.concurrent.ExecutorService。
Mockitoは非公開のみをモックできます&非最終クラスです。 なぜこのエラーが発生するのかわからない場合は、メーリングリストに報告してください。続く
:
初期IBM仮想マシンがMockitoの問題を有することが知られている、最新のバージョンにアップグレードしてください。
OK;だから私はA)に時間を費やして、古いJREでテストを実行しているので、B)すべてのテストをスキップすることができました。最終的には;私は以下のコードをまとめました。
は、しかし、いくつかの注意事項が先行:私はSR1またはSR2レベルを持つIBM Java8 JREで実行しているときに私のforceJUnit...()
方法が本当には、その例外をスローを検証しました。私のポイントは:メソッドがスローする必要があります...私はそのテストケースを実行するとき、私はまだ "モックできない"についてのMockito例外を打つ!
私がここで間違っているのは何ですか?
ここimport static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
class Helper {
public static void forceJUnitToIgnoreTestForJava8SR1() {
Assume.assumeFalse("Ignoring test when running with JRE SR1", isJava8SR1());
}
private static boolean isJava8SR1() {
String fullVersion = System.getProperty("java.fullversion", "");
return fullVersion.contains("R28_Java8_SR1");
}
}
@RunWith(MockitoJUnitRunner.class)
public class Mcve {
@Mock
private ExecutorService service;
@Before
public void setup() {
Helper.forceJUnitToIgnoreTestForJava8SR1();
// make the mcve do something
doAnswer(new Answer<Future<?>>() {
@Override
public Future<?> answer(InvocationOnMock invocation) throws Throwable {
return null;
}
}).when(service).submit(any(Runnable.class));
}
@Test
public void test() {
System.out.println("won't show up ;-(");
}
}
ああ、それは簡単だった...と正直に...誤る...まっすぐ進みます。 @BeforeClassを使ってもうまくいきます(もう1つのオプションはオプションではありませんでしたが、1つのmcveしか持っていませんが、この問題がある50以上のかなり複雑なテストケース)! – GhostCat