我用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。
2条答案
按热度按时间rryofs0p1#
我认为这与Sping Boot 的版本无关。
由于使用的是
@DataJpaTest
,因此不会创建BeanSpring文件:
如果您想测试JPA应用程序,可以使用@DataJpaTest。默认情况下,它将配置内存中的嵌入式数据库,扫描@Entity类并配置Spring Data JPA存储库。常规的@Component bean不会加载到ApplicationContext中。
如果您的测试不是真正的JPA测试,解决方案是使用
@SpringBootTest
而不是@DataJpaTest
。此外,仍然使用
@DataJpaTest
时,可以将@Import(ApplicationParameterManager.class)
添加到测试类中ut6juiuv2#
当使用@DataJpaTest时,您不会像正常运行应用程序时那样创建整个Spring上下文,而只是创建负责数据访问层的bean。
为了正确运行测试,需要提供
ApplicationParameterManager
类型的模拟bean,最简单的方法是使用@MockBean annotation
。因此,要使测试正常工作,请按以下方式编辑测试。
这样,spring上下文将包含所需依赖项的模拟bean。
查看
@MockBean
java文档以了解更多信息。https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/mock/mockito/MockBean.html如果您更喜欢运行整个spring上下文来执行完整的集成测试,请查看
@SpringBootTest
注解。当您希望隔离测试数据访问层时,应使用
@DataJpaTest
。