jUnit skip Method-Call in injectmock-method in a test(JUnit跳过方法-在测试中调用injectmock-方法)
问题描述
我有一个@InjectMocks cut
,这是我要测试的类。它有一个deleteX()
和一个init()
方法。
deleteX()
在完成之前正在调用init()
-我如何在测试中跳过此调用,因为每次我都只收到NullPointer Exception
。
public void deleteX() {
// some things
init();
}
我只想跳过它,因为我已经为它们都提供了测试方法,并且不想要大而重复的代码。
我无法执行Mockito.doNothing().when(cut).deleteX();
,因为@InjectMocks
不是Mockobject
。
推荐答案
有一种方法可以实现您想要的--那就是"部分模仿"。有关详细信息,请参阅此问题-Use Mockito to mock some methods but not others。
假设ClassUnderTest
如下:
class ClassUnderTest {
public void init() {
throw new RuntimeException();
}
public void deleteX() {
// some things
init();
}
}
此测试将通过:
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.verify;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class ClassUnderTestTest {
@Spy
private ClassUnderTest classUnderTest;
@Test
public void test() throws Exception {
// given
doNothing().when(classUnderTest).init();
// when
classUnderTest.deleteX();
// then
verify(classUnderTest).init();
}
}
对使用@Spy
注释的对象的所有方法调用都将是真实的,但模拟的方法除外。在这种情况下,init()
调用被模拟为不执行任何操作,而不是引发异常。
如果您需要向被测类注入依赖项,则需要通过@Before
方法来完成,例如:
private ClassUnderTest classUnderTest;
@Before
public void setUp() {
ClassUnderTest cut = new ClassUnderTest();
// inject dependencies into `cut`
classUnderTest = Mockito.spy(cut);
}
这篇关于JUnit跳过方法-在测试中调用injectmock-方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:JUnit跳过方法-在测试中调用injectmock-方法
基础教程推荐
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01