Java 默认@ContextConfiguration工作,但手动设置时不工作
我有一个应用程序配置类Java 默认@ContextConfiguration工作,但手动设置时不工作,java,spring-boot,spring-test,Java,Spring Boot,Spring Test,我有一个应用程序配置类 @Configuration @EnableScheduling public class AppConfig { @Bean public HibernateJpaSessionFactoryBean sessionFactory() { return new HibernateJpaSessionFactoryBean(); } } 我正在做一个测试 @RunWith(SpringJUnit4ClassRunner.clas
@Configuration
@EnableScheduling
public class AppConfig {
@Bean
public HibernateJpaSessionFactoryBean sessionFactory() {
return new HibernateJpaSessionFactoryBean();
}
}
我正在做一个测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@TestPropertySource(locations="classpath:test.properties")
public class CollectiveOneWebappApplicationTests {
@Test
public void testDecisionAlgorithm() throws IOException {
...
}
它很好用。现在我想更改测试的配置类,所以我创建了
public class TestConfig {
@Bean
public HibernateJpaSessionFactoryBean sessionFactory() {
return new HibernateJpaSessionFactoryBean();
}
}
并将测试更新为
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@TestPropertySource(locations="classpath:test.properties")
@ContextConfiguration(classes = TestConfig.class)
public class CollectiveOneWebappApplicationTests {
@Test
public void testDecisionAlgorithm() throws IOException {
...
}
但它不起作用。无法找到Hibernate实体工厂的bean
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory]
我想了一会儿,用
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@TestPropertySource(locations="classpath:test.properties")
@ContextConfiguration(classes = AppConfig.class)
public class CollectiveOneWebappApplicationTests {
@Test
public void testDecisionAlgorithm() throws IOException {
...
}
会让我回到默认行为,但事实并非如此。你知道为什么
@ContextConfiguration(classes=AppConfig.class)
与没有注释不同吗?你应该:
- 用
@TestConfiguration
- 另外,用
标记您的@Primary
方法,以确保选择了测试bean而不是生产配置中的测试beansessionFactory()
- 用
@TestConfiguration
- 另外,用
标记您的@Primary
方法,以确保选择了测试bean而不是生产配置中的测试beansessionFactory()
@Configuration
注释了TestConfig
类?它一定有。我还建议您使用@Profile
(s)。使用和不使用该注释都可以尝试。它应该在那里吗?您是否也用@Configuration
注释了TestConfig
类?它一定有。我还建议您使用@Profile
(s)。使用和不使用该注释都可以尝试。应该在那里吗?谢谢你的回答。我已经用@TestConfiguration
注释了TestConfig.class
,但是AppConfig.class
仍在上下文加载中使用…@JoseOspina@Primary
也需要,以防您有几个候选bean。可能会加载AppConfig
,因为您没有指明组件扫描路径,但这应该不是问题。@grape\u mao我也添加了@Primary
注释。除了调用AppConfig
来创建sessionFactory()
bean外,上下文加载还允许由于@EnableScheduling
注释而启用计划方法,这是我想在测试期间禁用的。@JoseOspina看一看。它用于TestConfig
类。刚刚使用过,但不知道如何使用它。这有点令人沮丧:(.我只想让Spring使用不同的配置类,而不是AppConfig
,仅此而已。我将对@EnableScheduling
进行一段时间的注释,我今天真的需要运行测试…答案是Thx。我已经用@TestConfiguration
注释了TestConfig.class
,但是AppConfig.class
是仍在上下文加载时使用…@JoseOspina@Primary
也需要,以防您有多个候选bean。AppConfig
可能会被加载,因为您没有指明组件扫描路径,但这应该不是问题。@grape\u mao我还添加了@Primary
注释。除了调用appConfig
创建sessionFactory()
bean,由于@EnableScheduling
注释,上下文加载还允许启用计划的方法,这是我想在测试期间禁用的。@JoseOspina看一看。它用于TestConfig
类。只是这样做了,但不知道如何处理它。有点令人沮丧:(.我只想让Spring使用不同的配置类,而不是AppConfig
,仅此而已。我将对@EnableScheduling
进行一段时间的注释,我今天真的需要运行测试。。。