问题描述
在我们的应用程序中,我发现集成测试收集了比我想要的更多的东西。我想知道结构化的应用程序配置的样子如何,您使用什么,这样我就可以@Import仅在生产中使用那些需要的配置。
...在那里强调,以合理的方式构造代码很重要,但是并没有显示太多,那是什么/意味着什么。我了解配置文件,并且可能会创建在测试中无法匹配的配置文件并手动导入,但这可能不是他们所说的那样明智。
考虑以下主要入口点:
@SpringBootApplication
public class DemoApplication {
private final SomeService someService;
public DemoApplication(SomeService someService) {
this.someService = someService;
}
@EventListener(ApplicationReadyEvent.class)
public void started() {
System.out.println(someService.doIt());
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class,args);
}
}
某些服务的界面:
public interface SomeService {
public String doIt();
}
和配置:
@Configuration
public class Config {
@Bean
public SomeService createSomeServiceBean() {
return new SomeService() {
@Override
public String doIt() {
return String.format("Hi! (At %s)",LocalDateTime.now());
}
};
}
}
在调用时,由@SpringBootApplication注释的入口点将进行组件扫描,将发现配置并且它将起作用。进一步阅读文档,我们会发现以下句子:Test slices exclude @Configuration classes from scanning
([[如果@ComponentScan确实具有basePackages和basePackagesClasses的默认值]),但是可以通过以下测试:
@SpringBootTest
class DemoApplicationTests {
@Autowired
private SomeService someService;
@Test
void contextLoads() {
System.out.println(someService.doIt());
}
}
很高兴发现定义的SomeService
bean。还是那句话意味着仅仅由@DataJpaTest注释的测试将不会注册某些配置? Kinda对我不清楚,但似乎不可能,因为@DataJpaTest会知道如何省略哪些配置,哪些不知道。
同样,我知道如何使用配置文件/排除配置。我在问“构建应用程序的明智方法”。
如何合理构造应用程序以及如何对其进行配置,以便:
-
@SpringBootApplication
带注释的入口点将为生产进行组件扫描,查找和使用配置,但是这些配置需要在测试中手动导入吗? - 将自动扫描某些软件包的配置,以用于开发和测试环境。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)