繁体   English   中英

MockitoJUnitRunner 已弃用

[英]MockitoJUnitRunner is 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。 我应该怎么做?

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;

此外,如果您使用的是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;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM