Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 默认@ContextConfiguration工作,但手动设置时不工作_Java_Spring Boot_Spring Test - Fatal编程技术网

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
    标记您的
    sessionFactory()
    方法,以确保选择了测试bean而不是生产配置中的测试bean

您应该:

  • @TestConfiguration
  • 另外,用
    @Primary
    标记您的
    sessionFactory()
    方法,以确保选择了测试bean而不是生产配置中的测试bean

您是否也用
@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
进行一段时间的注释,我今天真的需要运行测试。。。