Параметризованное тестирование с помощью Mockito с помощью JUnit @Rule?

Это следует из этот вопрос: где меня просят начать новый вопрос.

проблема в том, что я просто не знаю достаточно о JUnit Rule, или что происходит с Runners и тому подобное, чтобы решить проблему так, как упоминал Джефф Боумен.

1 ответов


в ваших более поздних комментариях я понял пробел: вам нужно использовать Mockito, как правило, и параметризовать как бегун, а не наоборот.

причина в том, что Бегун отвечает за отчетность о количестве тестов, а параметризованный манипулирует количеством тестов на основе количества методов тестирования и количества параметризованных входов, поэтому очень важно, чтобы параметризованный был частью процесса бегуна. Напротив, использование Mockito runner или правила просто инкапсулировать @Before и @After методы, которые инициализируют аннотации Mockito и проверяют использование Mockito, что можно сделать очень легко как @Rule, который работает рядом с другими @Rule экземпляры--до такой степени, что MockitoJUnitRunner является почти устаревший.

в кроватку прямо из JUnit4 Параметризованный Тест страница doc и MockitoRule страница doc:

@RunWith(Parameterized.class)
public class YourComponentTest {

    @Rule public MockitoRule rule = MockitoJUnit.rule();
    @Mock YourDep mockYourDep;

    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][] {     
                 { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }  
           });
    }

    private int fInput;

    private int fExpected;

    public YourComponentTest(int input, int expected) {
        fInput = input;
        fExpected = expected;
    }

    @Test
    public void test() {
        // As you may surmise, this is not a very realistic example of Mockito's use.
        when(mockYourDep.calculate(fInput)).thenReturn(fExpected);
        YourComponent yourComponent = new YourComponent(mockYourDep);
        assertEquals(fExpected, yourComponent.compute(fInput));
    }
}