Anda tidak dapat melakukan ini karena menurut spesifikasi Anda tidak dapat meletakkan anotasi yang sama dua kali pada elemen beranotasi yang sama.
Lalu apa solusinya? Solusinya adalah dengan menempatkan hanya satu @RunWith()
dengan pelari Anda tidak dapat berdiri tanpanya dan mengganti yang lain dengan yang lain. Dalam kasus Anda, saya kira Anda akan menghapus MockitoJUnitRunner
dan melakukan programatik apa yang dilakukannya.
Faktanya, satu-satunya hal yang dilakukannya adalah:
MockitoAnnotations.initMocks(test);
di awal kasus uji. Jadi, solusi paling sederhana adalah memasukkan kode ini ke dalam setUp()
metode:
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
Saya tidak yakin, tetapi mungkin Anda harus menghindari beberapa panggilan dari metode ini menggunakan flag:
private boolean mockInitialized = false;
@Before
public void setUp() {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
Namun lebih baik, solusi yang dapat digunakan kembali dapat diimplementasikan dengan aturan JUnt.
public class MockitoRule extends TestWatcher {
private boolean mockInitialized = false;
@Override
protected void starting(Description d) {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
}
Sekarang tambahkan saja baris berikut ke kelas pengujian Anda:
@Rule public MockitoRule mockitoRule = MockitoJUnit.rule();
dan Anda dapat menjalankan kasus uji ini dengan pelari mana pun yang Anda inginkan.