MockitoJUnitRunner已弃用

时间:2017-01-28 11:58:45

标签: java mockito deprecated

我正在尝试使用@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。我应该怎么做呢?

6 个答案:

答案 0 :(得分:114)

org.mockito.runners.MockitoJUnitRunner现在确实已弃用,您应该使用org.mockito.junit.MockitoJUnitRunner代替。如您所见,只有包名称已更改,该类的简单名称仍为 MockitoJUnitRunner

摘录自org.mockito.runners.MockitoJUnitRunner

的javadoc
  

已移至MockitoJUnitRunner,此类将被移除   Mockito 3

答案 1 :(得分:7)

你可以试试这个:

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

因为您添加了@Before注释,您的模拟对象可以是新的并且可以多次记录,并且在所有测试中,您可以为对象提供新属性。但是,如果您想要模拟对象的一次时间记录行为,请添加@BeforeCLass

答案 2 :(得分:4)

还有一个@Rule选项:

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

或者在Kotlin:

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

答案 3 :(得分:0)

您可以尝试导入以下内容:

import org.mockito.runners.MockitoJUnitRunner;

此外,如果您使用的是 Eclipse ,只需按 Ctrl + Shift + O ,它将自动导入它。

答案 4 :(得分:0)

当我将依赖项更新到最新版本时,我设法解决了这个问题:

def mockito_version = '2.28.2'

// For local unit tests on your development machine
testImplementation "org.mockito:mockito-core:$mockito_version"

// For instrumentation tests on Android devices and emulators
androidTestImplementation "org.mockito:mockito-android:$mockito_version"

然后我通过替换命令更改了导入(Mac:cmd+Shift+R Windows:Ctrl+Shift+R) 来自

import org.mockito.runners.MockitoJUnitRunner; 

import org.mockito.junit.MockitoJUnitRunner;

答案 5 :(得分:-2)

如果您不想使用@RunWith(MockitoJUnitRunner.class),可以试试这个

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