사양에 따라 동일한 주석이 달린 요소에 동일한 주석을 두 번 넣을 수 없기 때문에 이렇게 할 수 없습니다.
그렇다면 해결책은 무엇입니까? 해결책은 @RunWith()
당신이 없이는 서있을 수없는 러너와 함께 하나만 놓고 다른 하나를 다른 것으로 교체하는 것입니다. 귀하의 경우에는 제거 MockitoJUnitRunner
하고 프로그래밍 방식으로 수행 할 것이라고 생각합니다 .
실제로 실행되는 유일한 작업은 다음과 같습니다.
MockitoAnnotations.initMocks(test);
테스트 케이스의 시작 부분에서. 따라서 가장 간단한 해결책은이 코드를 setUp()
메서드에 넣는 것입니다.
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
나는 잘 모르겠지만, 아마도 당신은 플래그를 사용하여이 방법의 여러 호출을 피해야한다 :
private boolean mockInitialized = false;
@Before
public void setUp() {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
그러나 더 나은, 재사용 가능한 솔루션은 JUnt의 규칙으로 구현 될 수 있습니다.
public class MockitoRule extends TestWatcher {
private boolean mockInitialized = false;
@Override
protected void starting(Description d) {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
}
이제 테스트 클래스에 다음 줄을 추가하십시오.
@Rule public MockitoRule mockitoRule = MockitoJUnit.rule();
원하는 러너로이 테스트 케이스를 실행할 수 있습니다.