Подтвердить что ты не робот

MockitoJUnitRunner устарел

Я пытаюсь сделать unit test с @InjectMocks и @Mock.

@RunWith(MockitoJUnitRunner.class)
public class ProblemDefinitionTest {

    @InjectMocks
    ProblemDefinition problemDefinition;

    @Mock
    Matrix matrixMock;    

    @Test
    public void sanityCheck() {
        Assert.assertNotNull(problemDefinition);
        Assert.assertNotNull(matrixMock);
    }
}

Когда я не включаю аннотацию @RunWith, тест терпит неудачу. Но

Тип MockitoJUnitRunner устарел

Я использую Mockito 2.6.9. Как мне это сделать?

4b9b3361

Ответ 1

org.mockito.runners.MockitoJUnitRunner теперь действительно устарел, вы должны использовать org.mockito.junit.MockitoJUnitRunner. Поскольку вы можете видеть только изменение имени пакета, простое имя класса по-прежнему MockitoJUnitRunner.

Выдержка из javadoc org.mockito.runners.MockitoJUnitRunner:

Переместится на MockitoJUnitRunner, этот класс будет удален с помощью Mockito 3

Ответ 2

Вы можете попробовать следующее:

@Before
public void setup() {
    MockitoAnnotations.initMocks(this);
}

Поскольку вы добавляете аннотацию @Before, ваши макетные объекты могут быть новыми и записанными много раз, и во всех тестах вы можете дать объектам новые свойства. Но если вы хотите, чтобы одно время записывало поведение для макета, добавьте @BeforeCLass

Ответ 3

Существует также опция @Rule:

@Rule 
public MockitoRule rule = MockitoJUnit.rule();

Или в Котлине:

@get:Rule
var rule = MockitoJUnit.rule()

Ответ 4

Вы можете попробовать это, если вы не хотите использовать @RunWith (MockitoJUnitRunner.class)

@BeforeClass
public void setup() {
    MockitoAnnotations.initMocks(this);
}