繁体   English   中英

使用 MockitoJUnitRunner 测试时的 null 服务

[英]null service when testing with MockitoJUnitRunner

我在我的 Spring 引导应用程序中进行了此测试,但是当我运行测试时,boniUserService 是 null

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

您使用@RunWith注释指定的测试运行器指定谁将处理您的测试 class 中的注释。他们处理您的测试 class 中的注释并为您模拟对象。 在你的情况下,你已经用@RunWith(MockitoJUnitRunner.class)注释了你的 class 所以你的 class 中应该有一些注释 Mockito 由MockitoJUnitRunner处理。 为了实现您的目标,您可以通过@MockBean注释来注释您的 bean。

@RunWith(MockitoJUnitRunner.class)
public class BoniUserServiceTest {

    @MockBean
    private BoniUserService boniUserService;
    

    @Test
    public void getUserById() {

        boniUserService.getUserById("ss");

    }
}

请注意,在这种方法中,不会加载 Spring 应用程序的上下文。 通常您希望根据其他组件的模拟行为来测试您的组件之一。 所以通常你是这样实现的:

@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");

    }
}

您需要启动应用程序上下文才能使其工作,这可以通过使用@SpringBootTest注释来实现,然后您需要使用@Autowired注释来注入您的服务。 像这样:

@SpringBootTest
@RunWith(MockitoJUnitRunner.class)
public class BoniUserServiceTest {
    
    @Autowired
    private BoniUserService boniUserService;
    

    @Test
    public void getUserById() {

        boniUserService.getUserById("ss");

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM