2017-01-28 13 views
21

Я пытаюсь сделать модульное тестирование с @InjectMocks и @Mock.MockitoJUnitRunner осуждается

@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. Как мне это сделать?

ответ

43

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

Отрывок из Javadoc из org.mockito.runners.MockitoJUnitRunner:

Переехал в MockitoJUnitRunner, этот класс будет удален с Mockito 3

0

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

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

Вы можете попробовать это:

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

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

2

Существует также @Rule вариант:

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

Или в Котлин:

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