Spring Boot 构建后和测试

5gfr0r5j  于 2023-02-08  发布在  Spring
关注(0)|答案(2)|浏览(143)

我用Spring保护套3
主Spring Boot等级

@EnableTransactionManagement
@SpringBootApplication
@Slf4j
public class FlexApplication{

    private final ApplicationParameterManager appParamManager;

    public FlexApplication(ApplicationParameterManager appParamManager) {
        this.appParamManager = appParamManager;
    }

    @PostConstruct
    public void init(){

    }

    ....

}

@Service
@Slf4j
public class ApplicationParameterManager{
....
}

基础试验

@AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.NONE)
@DataJpaTest
public class ListUserRepositoryTest {

    @Autowired
    private ListUserRepository repository;

    @Test
    public void getListUserByUserType(){
        String typeUser = "CETEST";

        Pageable page =  Pageable.ofSize(10);

        Page<ListUser> pageListUser = repository.findAllByTypeUser(typeUser, page);
        assertThat(pageListUser.getContent().size() > 5 ).isTrue();

    }

}

否则本次测试,应用程序运行良好
我得到这个错误
com. acme. FlexApplication中构造函数的参数0需要类型为"com. acme. parameter. ApplicationParameterManager"的Bean,但找不到该Bean。

rryofs0p

rryofs0p1#

我认为这与Sping Boot 的版本无关。
由于使用的是@DataJpaTest,因此不会创建Bean
Spring文件:
如果您想测试JPA应用程序,可以使用@DataJpaTest。默认情况下,它将配置内存中的嵌入式数据库,扫描@Entity类并配置Spring Data JPA存储库。常规的@Component bean不会加载到ApplicationContext中。
如果您的测试不是真正的JPA测试,解决方案是使用@SpringBootTest而不是@DataJpaTest
此外,仍然使用@DataJpaTest时,可以将@Import(ApplicationParameterManager.class)添加到测试类中

ut6juiuv

ut6juiuv2#

当使用@DataJpaTest时,您不会像正常运行应用程序时那样创建整个Spring上下文,而只是创建负责数据访问层的bean。
为了正确运行测试,需要提供ApplicationParameterManager类型的模拟bean,最简单的方法是使用@MockBean annotation
因此,要使测试正常工作,请按以下方式编辑测试。

@AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.NONE)
@DataJpaTest
public class ListUserRepositoryTest {
    @MockBean
    private ApplicationParameterManager applicationParameterManager;
    @Autowired
    private ListUserRepository repository;

    @Test
    public void getListUserByUserType(){
        String typeUser = "CETEST";

        Pageable page =  Pageable.ofSize(10);

        Page<ListUser> pageListUser = repository.findAllByTypeUser(typeUser, page);
        assertThat(pageListUser.getContent().size() > 5 ).isTrue();

    }
}

这样,spring上下文将包含所需依赖项的模拟bean。
查看@MockBean java文档以了解更多信息。https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/mock/mockito/MockBean.html
如果您更喜欢运行整个spring上下文来执行完整的集成测试,请查看@SpringBootTest注解。
当您希望隔离测试数据访问层时,应使用@DataJpaTest

相关问题