Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Spring配置调用了两次,使用Groovy Spock的bean也是如此_Spring_Spring Boot_Groovy_Spock - Fatal编程技术网

Spring配置调用了两次,使用Groovy Spock的bean也是如此

Spring配置调用了两次,使用Groovy Spock的bean也是如此,spring,spring-boot,groovy,spock,Spring,Spring Boot,Groovy,Spock,我处于一种奇怪的境地,我们有java和groovy中的测试用例,但最终会转移到groovy 我有两个抽象类,一个用于java,一个用于spock,如下所示 @ActiveProfiles(resolver = TestProfileResolver.class) @IntegrationTest @IntegrationTestConfiguration( applicationStartUpClass = Application.class, additiona

我处于一种奇怪的境地,我们有java和groovy中的测试用例,但最终会转移到groovy

我有两个抽象类,一个用于java,一个用于spock,如下所示

@ActiveProfiles(resolver = TestProfileResolver.class)
@IntegrationTest
@IntegrationTestConfiguration(
        applicationStartUpClass = Application.class,
        additionalLocalConfigurationClasses = [LocalIntegrationTestConfiguration.class])
@SpringApplicationConfiguration(classes = [
    LocalIntegrationTestConfiguration.class,
    NonLocalIntegrationTestConfiguration.class,
])
abstract class TestSpec extends Specification {
}

@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles(resolver = TestProfileResolver.class)
@IntegrationTest
@IntegrationTestConfiguration(
    applicationStartUpClass = Application.class,
    additionalLocalConfigurationClasses = { LocalIntegrationTestConfiguration.class, Resources.class})
@SpringApplicationConfiguration(classes = {
    LocalIntegrationTestConfiguration.class,
    NonLocalIntegrationTestConfiguration.class,
})
@Component
abstract public class Test {
}

@WebAppConfiguration
@EnableConfigurationProperties({TestProperties.class})
@Import({
    Resources.class,
})
@Profile({"local"})
public class LocalIntegrationTestConfiguration {
    public LocalIntegrationTestConfiguration() {
        System.out.println(" $$$$$ LocalIntegrationTestConfiguration $$$$");
    }
}
问题是LocalIntegrationTestConfiguration被调用了两次,一次由常规spring框架调用,然后由spock框架调用。我只想叫它一次


我想在TESTSPEC中重用测试时的配置,但不知道如何重用。有什么优秀的专家吗

这是由spring引起的,如果您以这种方式配置两个junit测试,就会发生这种情况。问题是,您正在创建不同的上下文,因为其中一个正在使用

@IntegrationTestConfiguration(
applicationStartUpClass=Application.class,
additionalLocalConfigurationClasses=[LocalIntegrationTestConfiguration.class])

另一个呢

@IntegrationTestConfiguration(
applicationStartUpClass=Application.class,
additionalLocalConfigurationClasses={LocalIntegrationTestConfiguration.class,Resources.class})

请注意附加的
资源.class

如果希望spring重用上下文,则必须将其配置为完全相同。有关更多详细信息,请阅读spring文档

为什么要用
@组件
注释测试