我正在尝试使用@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。我应该怎么做呢?
答案 0 :(得分:114)
org.mockito.runners.MockitoJUnitRunner
现在确实已弃用,您应该使用org.mockito.junit.MockitoJUnitRunner
代替。如您所见,只有包名称已更改,该类的简单名称仍为 MockitoJUnitRunner
。
摘录自org.mockito.runners.MockitoJUnitRunner
:
已移至
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);
}