当前位置: 首页 > 知识库问答 >
问题:

Spring配置被调用了两次,例如使用Groovy Spock的bean

荆运诚
2023-03-14
@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中重用TEST上的配置,但不知道如何重用。有没有很好的专家?

共有1个答案

周鸿运
2023-03-14

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

@IntegrationTestConfiguration(applicationStartUpClass=Application.Class,AdditionalLocalConfigurationClasss=[LocalIntegrationTestConfiguration.Class])

另一个

请注意附加的resource.class

如果希望spring重用上下文,那么它必须配置为相同的。有关更多细节,请阅读有关上下文缓存的spring文档。

为什么要用@component来注释测试呢?

 类似资料:
  • 在我的应用程序中,我将TextWatcher放在EditText上。当我更改EditText的文本时,TextWatcher的事件会被调用两次。 我正在使用模拟器来运行应用程序。

  • 问题内容: 我在Go中关注一个简单的Web服务器示例。 我插入了一条语句,使生成的代码如下所示: 问题是,每当我在Web浏览器中加载端口8000时,此函数就会被调用两次。这是一个问题,因为我打算在每次页面访问时增加一个计数器。通过这种行为,计数器将增加两次。OTOH,如果我这样做,它只会被调用一次。 我觉得我在这里失踪真的很愚蠢。 问题答案: 只需记录请求。您将意识到您的浏览器还请求/favico

  • 我正在开发一个应用程序使用Android4.0IC和碎片。 考虑ICS4.0.3(API level 15)API的演示示例应用程序中的修改示例: }

  • 我正在尝试对作业使用Spring批处理。我有两个作业tempJob和tempJob2在两个单独的配置中。当尝试使用命令行参数(-dspring.batch.job.names=tempJob)运行tempJob时,SpringBatch尝试运行tempJob两次,我得到以下错误 2018-06-15 11:36:37.956信息14436---[main]O.S.B.C.L.Support.Sim

  • 问题内容: 我的活动课在这里: 和相机预览类在这里: 但是,当我测试该类时,似乎首先调用onResume(),然后在1或2秒后再次调用。因此,相机必须再次刷新。如果我根本没有onResume(),则摄像头预览稳定,但是如果我从主屏幕或其他某个应用再次切换到该应用,则会崩溃。我发现onPause()不会影响任何一个。我的代码正确吗?我应该添加/删除哪些内容以使其不会再次刷新并且在应用切换后仍然不会崩

  • 我的代码和配置文件如下 BeanPostProcesssor实现 客户Bean 主类 输出 ---在初始化之前-----在初始化之后----在初始化之前----在初始化之前----在初始化之前----在初始化之前----...bean通过init方法----在初始化之后----...setname.......GetName.....名称为..测试用户