spring-boot - mockito 调用真实方法
问题描述
我有这个测试:但方法 checkIfHold 也被嘲笑
@RunWith(MockitoJUnitRunner.class)
public class FrontSecurityServiceTest {
@Mock
private FrontSecurityService frontSecurityService
= mock( FrontSecurityService.class, withSettings().defaultAnswer(CALLS_REAL_METHODS));
@Test
public void test1() {
when(frontSecurityService.getLoggedInUserId()).thenReturn("000");
frontSecurityService.checkIfHold(9L);
}
}
我也试过
@Mock
PerService perService;
@Spy
private FrontSecurityService frontSecurityService = new FrontOfficeSecurityService(perService);
但不是嘲笑方法getLoggedInUserId()
,getLoggedInUserId 是公共的、非静态的和非最终的。
我也试过了,它可以工作,但是在 checkIfHold 内部调用 MenService 是 null
@RunWith(SpringJUnit4ClassRunner.class)
public class FrontSecurityServiceTest {
@Mock
MenService menService;
@Mock
FrontSecurityService frontSecurityService;
@Rule
public MockitoRule rule = MockitoJUnit.rule();
@Test
public void test1() {
MenReturn menReturn1 = MenReturn.builder().build();
when(menService.getMen(anyString(), anyLong())).thenReturn(Arrays.asList(menReturn1));
when(frontSecurityService.checkIfHold(anyLong())).thenCallRealMethod();
when(frontSecurityService.getLoggedInUserId()).thenReturn("000");
frontSecurityService.checkIfHold(9L);
}
}
解决方案
我想这@Spy
就是你要找的。尽管如此,FrontSecurityService
同时测试和模拟它对我来说似乎很奇怪。尝试以下操作:
@RunWith(MockitoJUnitRunner.class)
public class FrontSecurityServiceTest {
@Spy
private FrontSecurityService frontSecurityService;
@Test
public void test1() {
when(frontSecurityService.getLoggedInUserId()).thenReturn("000");
frontSecurityService.checkIfHold(9L);
}
}
推荐阅读
- r - 在 R 中对年龄进行分类
- android - 更改 MaterialDatePicker dateRangePicker() 右上角的文本按钮
- lua - 使用 Lua 在 Love2D 中需要一个共享对象 (.so) 文件
- docker - 使用 Docker Compose 的多容器 ASP.NET Core 应用程序
- laravel - Laravel 8:如何删除存储文件夹中的文件
- python - Python:处理定位/引用第一/第二/第三人的本地化库
- python-3.x - How to send tailored emails with python and mailgun (HTTP method)
- c++ - 如何在 Visual Studio 中将第三方库链接到我的项目中?
- python - Pandas: Script to fill the gap in IP address number
- lightningchart - 在闪电图中添加注释文本