Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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 Spring重写另一个模块的bean_Java_Spring_Spring Mvc_Spring Mvc Test - Fatal编程技术网

Java Spring重写另一个模块的bean

Java Spring重写另一个模块的bean,java,spring,spring-mvc,spring-mvc-test,Java,Spring,Spring Mvc,Spring Mvc Test,在我的多模块项目中,我将集成测试作为单独的模块。测试将应用程序jar添加为依赖项。是否可以从集成测试中重写应用程序bean定义 在应用程序中,我有以下Bean(标准java邮件发送器配置) 现在,我所有的集成测试都扩展了加载测试配置类的BaseIntegrationTest @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(classes = { AppTestConfigurat

在我的多模块项目中,我将集成测试作为单独的模块。测试将应用程序jar添加为依赖项。是否可以从集成测试中重写应用程序bean定义

在应用程序中,我有以下Bean(标准java邮件发送器配置)

现在,我所有的集成测试都扩展了加载测试配置类的BaseIntegrationTest

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = { AppTestConfiguration.class, MailTestConfiguration.class})
public class BaseIntegrationTest {

}
最后,在MailTestConfiguration中,我定义了另一个JavaMailSender

@Primary
@Bean
@Profile(TestProfiles.MAIL_GREEN_SMTP)
public JavaMailSender javaMailService() {

    JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
    javaMailSender.setHost("localhost");
    javaMailSender.setPort(3025);

    return javaMailSender;
}
当我从应用程序本身运行测试时,它正在工作。当我从另一个模块运行测试时,bean不会被覆盖

我知道应用程序内部定义的AppConfiguration类不能扫描集成测试配置类,所以我也加载AppTestConfiguration

@Configuration
@ComponentScan(basePackages = {"..."})
public class AppTestConfiguration extends AppConfiguration {

}

如何使其工作?

您应该检查两件事:

  • 当您从另一个模块运行测试时,是否启用了正确的Spring配置文件
  • 从另一个模块运行测试时,给定的配置是否在扫描路径中

  • 当然我搞砸了个人资料。在我的BaseIntegrationTest中,我根据配置定义了活动概要文件。我还打印了在那里解析的配置文件(打印了正确的配置文件名称)

    @课前 公共静态void init(){ System.setProperty(默认的\u PROFILES\u PROPERTY\u名称,ProfileResolver.getActiveProfiles()); }
    在您说服我它应该可以工作之后,我重新检查了配置,发现我还在属性中添加了spring.profiles.active。删除此配置后,一切正常。另一种方法是使用
    AbstractEnvironment.ACTIVE\u PROFILES\u PROPERTY\u NAME
    而不是
    AbstractEnvironment.DEFAULT\u PROFILES\u PROPERTY\u NAME

    是否在子测试类中加载了正确的配置文件?另外,我会将runwith和webappconfiguration移到子测试类中,以避免任何讨厌的继承问题。
    @Configuration
    @ComponentScan(basePackages = {"..."})
    public class AppTestConfiguration extends AppConfiguration {
    
    }
    
    @BeforeClass public static void init() { System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, ProfileResolver.getActiveProfiles()); }