Bunu yapamazsınız çünkü spesifikasyona göre aynı notu aynı ek açıklamalı öğeye iki kez koyamazsınız.
Peki çözüm nedir? Çözüm, @RunWith()
koşucuya sadece bir tane koymak ve diğerini başka bir şeyle değiştirmek. Sizin durumunuzda MockitoJUnitRunner
, yaptığı şeyi programlı bir şekilde kaldıracak ve yapacaksınız.
Aslında yaptığı tek şey çalışıyor:
MockitoAnnotations.initMocks(test);
test senaryosunun başında. Dolayısıyla, en basit çözüm bu kodu setUp()
yönteme koymaktır :
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
Emin değilim, ancak muhtemelen bayrak kullanarak bu yöntemin birden çok çağrılmasından kaçınmalısınız:
private boolean mockInitialized = false;
@Before
public void setUp() {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
Ancak daha iyisi, yeniden kullanılabilir çözüm JUnt'un kuralları ile uygulanabilir.
public class MockitoRule extends TestWatcher {
private boolean mockInitialized = false;
@Override
protected void starting(Description d) {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
}
Şimdi aşağıdaki satırı test sınıfınıza ekleyin:
@Rule public MockitoRule mockitoRule = MockitoJUnit.rule();
ve bu test durumunu istediğiniz herhangi bir koşucu ile çalıştırabilirsiniz.