junit - 如何在 Mockito.Mock() 之后注入 Mock
问题描述
我有一个抽象类,其中包含许多具有业务逻辑的方法。在编写 Junits 时,我正在通过调用真实方法创建其 Mock 来测试抽象类。在我的 Junit 中,我不想创建一个具体的类来测试抽象类方法,因为这样我的 Junit 测试用例会得到一些我不想要的行为。
我正在使用它来实现模拟来调用我的抽象类。
Mockito.mock(AbstractService.class,Mockito.CALLS_REAL_METHODS)
但我的问题是,我的抽象类有很多自动装配的依赖项。子类是@component
. 现在,如果它不是一个抽象类,我会使用@InjectMocks 来注入这些模拟依赖项。但是如何向我在上面创建的这个实例添加模拟。
在此处简化代码版本/
abstract class AbstractService{
@Autowired
DependencyOne dp1;
@Autowired
private DependencyOne dp2;
public void doSometingSpecial(){
dp1.Dosomething(dp2.dosomethingElse())
.....
.....
}
}
我的 Junit 是
@ExtendWith(SpringExtension.class)
@TestInstance(Lifecycle.PER_CLASS)
class AbstractServiceTest {
@Mock
private DependencyOne dp1;
@Mock
private DependencyOne dp2;
.....
.....
@Test
void testDirectCall_whenSomething_thenSomerhing(){
AbstractService service = Mockito.mock(AbstractService.class,Mockito.CALLS_REAL_METHODS);
//How to inject dep1 and dp2 mock to write junit for doSometingSpecial()
}
}
解决方案
只需为父类添加注入模拟
@InjectMocks
AbstractService abstractService;
内部测试方法给出,
@Test
void testDirectCall_whenSomething_thenSomerhing(){
when(myAbstractClass.doSometingSpecial()).thenReturn("good");
Assert.assertEquals("good",myAbstractClass.doSometingSpecial());
}
不需要
AbstractService service = Mockito.mock(AbstractService.class,Mockito.CALLS_REAL_METHODS);
在进口请添加
import static org.mockito.Mockito.*;
推荐阅读
- codenameone - 网络呼叫使用 setFailSilently() 在屏幕上显示错误消息
- haskell - 如何在haskell中获取日期?
- php - 销位置 - 滑块销位置问题
- pandas - Matplotlib:如何使用 pandas plot api 在散点图中绘制一个空圆圈?
- java - 从 Github 下载 JAVA 代码后,类文件总是被锁定,我永远无法编译或运行我的代码
- php - 用户登录PHP后重定向到同一页面
- rust - 让算法在 Rust 中同时使用 f32 和 f64 所需的 Rust 特征
- wpf - WPF Metro 按钮中的多种样式资源
- c++ - 如何将到达图形视图右侧(末端)的 QGraphicsPixmapItem 移动到左侧(开始)侧(就像蛇游戏中发生的事情)
- java - 如何使 Selenium webdriver 等待元素将其属性更改为 Java 中的其他内容