使用MockitoJUnitRunner测试时为空服务

时间:2020-10-28 14:15:36

标签: java spring spring-boot junit mockito

我的Spring Boot应用程序中有此测试。但是,当我运行测试时,boniUserService为空

  @RunWith(MockitoJUnitRunner.class)
    public class BoniUserServiceTest {
        
        private BoniUserService boniUserService;
        
    
        @Test
        public void getUserById() {
    
            boniUserService.getUserById("ss");
    
        }
    }

2 个答案:

答案 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))
  }
}