首页 > 解决方案 > 测试配置服务抛出 NPE

问题描述

我正在努力编写集成测试,我想测试与 JPA 存储库通信的服务,我似乎犯了一个错误,因为测试无法运行并在我的服务上抛出 NPE。

我的应用程序在 springboot 配置上运行(没有什么奇怪的依赖关系,我想尽可能保持库存以避免副作用)。

我的服务管理用户并且非常简单: - 自动连接的存储库 - 一种调用存储库的方法(我想让测试在添加控制逻辑之前运行)

@Service
public class ApplicationUserService{

@Autowired
private ApplicationUserRepository applicationUserRepository;

public ApplicationUser getUserByFirstname(String firstnameToLookFor){
    return this.applicationUserRepository.findByFirstname ( 
    firstnameToLookFor );

}
}

存储库也很简单:

public interface ApplicationUserRepository extends 
JpaRepository<ApplicationUser, Integer> {

// ...

ApplicationUser findByFirstname(String firstname);
}

最后我的测试作为其他两个元素非常简单:

@RunWith (SpringRunner.class)
public class UserServiceIntegrationTest {

@TestConfiguration
static class UserServiceTestContextConfiguration {
    @Bean
    public ApplicationUserService applicationUserService(){

        return new ApplicationUserService ();
    }
}

@Autowired
private ApplicationUserService applicationUserService;

@MockBean
private ApplicationUserRepository applicationUserRepository;


@Before
public void setup(){
    ApplicationUser user = new ApplicationUser ("darky", "bruce@wayne.com", 
"iLoveSelin4", "Bruce", "WAYNE", "en");

    Mockito.when (applicationUserRepository.findByFirstname ( 
user.getUsername () )).thenReturn ( user );
}

@Test
public void getUserByFirstName() {
    String firstnameToLook = "Bruce";
    ApplicationUser userFound = applicationUserService.getUserByFirstname ( 
firstnameToLook );
    assertThat(userFound.getFirstname ()).isEqualTo ( firstnameToLook );
}

}

据说,测试必须没问题。但如前所述,我在断言上抛出了 NPE assertThat(userFound.getFirstname ()).isEqualTo ( firstnameToLook );,当我在断言上方的行上进行调试时,我可以看到它applicationUserService为空。

我在这里做错了什么?

谢谢你的帮助!

标签: spring-bootmockitointegration-testingjunit4

解决方案


推荐阅读