我的Spring Boot应用程序中有此测试。但是,当我运行测试时,boniUserService为空
@RunWith(MockitoJUnitRunner.class)
public class BoniUserServiceTest {
private BoniUserService boniUserService;
@Test
public void getUserById() {
boniUserService.getUserById("ss");
}
}
答案 0 :(得分:1)
使用@RunWith
注释指定的测试运行者指定谁将在测试类中处理注释。它们在您的测试类中处理注释,并为您模拟对象。在您的情况下,您已经用@RunWith(MockitoJUnitRunner.class)
注释了您的班级,因此您的班级应该有一些Mockito的注释要由MockitoJUnitRunner
处理。为了实现您的目标,您可以通过@MockBean
注释来注释bean。
@RunWith(MockitoJUnitRunner.class)
public class BoniUserServiceTest {
@MockBean
private BoniUserService boniUserService;
@Test
public void getUserById() {
boniUserService.getUserById("ss");
}
}
请注意,在这种方法中,不会加载Spring Application的上下文。通常,您希望基于其他组件的模拟行为来测试您的组件之一。因此通常您可以这样实现:
@RunWith(SpringRunner.class)
@SpringBootTest
public class BoniUserServiceTest {
@Autowired
private BoniUserService boniUserService;
@MockBean
private BoniUserRepository boniUserRepository;
@Test
public void getUserById() {
given(this.boniUserRepository.getUserFromRepository()).willReturn(new BoinoUsr("test"));
boniUserService.getUserById("ss");
}
}
答案 1 :(得分:0)
您需要使应用程序上下文正常运行,可以通过使用@Autowired
批注来实现,然后需要使用@SpringBootTest
@RunWith(MockitoJUnitRunner.class)
public class BoniUserServiceTest {
@Autowired
private BoniUserService boniUserService;
@Test
public void getUserById() {
boniUserService.getUserById("ss");
}
}
批注来注入服务。像这样:
library(openxlsx)
quickExcelPrint=function(rObject,filename="r_excel_tmp.xlsx",overwrite=FALSE){
if (filename %in% dir() & overwrite==FALSE){
stop(paste0("Excel filename ",filename," already exists! Please either specify another filename or set overwrite to TRUE."))
} else{
write.xlsx(rObject, filename)
shell(paste0("start excel ",filename))
}
}