Bạn không thể làm điều này vì theo thông số kỹ thuật, bạn không thể đặt cùng một chú thích hai lần trên cùng một phần tử được chú thích.
Vậy giải pháp là gì? Giải pháp là chỉ đặt một @RunWith()
với người chạy mà bạn không thể thiếu và thay thế một cái khác bằng thứ khác. Trong trường hợp của bạn, tôi đoán bạn sẽ xóa MockitoJUnitRunner
và làm theo chương trình những gì nó làm.
Trong thực tế, điều duy nhất nó chạy:
MockitoAnnotations.initMocks(test);
trong phần đầu của test case. Vì vậy, giải pháp đơn giản nhất là đặt mã này vào setUp()
phương thức:
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
Tôi không chắc, nhưng có lẽ bạn nên tránh nhiều lần gọi phương thức này bằng cách sử dụng cờ:
private boolean mockInitialized = false;
@Before
public void setUp() {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
Tuy nhiên tốt hơn, giải pháp có thể tái sử dụng có thể được thực hiện với các quy tắc của JUnt.
public class MockitoRule extends TestWatcher {
private boolean mockInitialized = false;
@Override
protected void starting(Description d) {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
}
Bây giờ chỉ cần thêm dòng sau vào lớp thử nghiệm của bạn:
@Rule public MockitoRule mockitoRule = MockitoJUnit.rule();
và bạn có thể chạy trường hợp thử nghiệm này với bất kỳ người chạy nào bạn muốn.