不推荐使用 MockitoJUnitRunner

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

55931 次浏览

org.mockito.runners.MockitoJUnitRunner 现在已经被废弃了,你应该使用 org.mockito.junit.MockitoJUnitRunner来代替。正如您所看到的,只有包的名称发生了变化,类的简单名称仍然是 MockitoJUnitRunner

摘自 org.mockito.runners.MockitoJUnitRunner的 javadoc:

移动到 MockitoJUnitRunner,这个类将被移除 Mockito 3

你可以试试这个:

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

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

还有一个 @Rule选项:

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

或者在 Kotlin:

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

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

import org.mockito.runners.MockitoJUnitRunner;

另外,如果您使用 < em > Eclipse ,只需按下 Ctrl + Shift + O,它将自动导入它。

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

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;