为测试动态加载Spring聚合器参数

时间:2014-09-10 08:59:00

标签: java spring cucumber spring-integration cucumber-junit

我在我的应用中使用了spring集成器。 我使用黄瓜测试流量,我想确保聚合器释放 策略由正确的参数执行。我有2个参数用于该策略: 超时和大小。 我想知道是否有办法在步骤中动态加载这些参数? 到目前为止,我已经失去了如何让它发挥作用。

谢谢,

谢谢Artem,

我使用了directFieldAccessor,我试图从聚合器中获取release-strategy-expressiongroup-timeout属性,但问题是我无法访问这些属性领域:

public void setAggregatorConfiguration(String aggregatorName, int aggregationThreshold, long aggregationTimeout) { 
         EventDrivenConsumer aggregator = getAggregator(aggregatorName);           
         DirectFieldAccessor directFieldAccessor = new DirectFieldAccessor(aggregator); 
         directFieldAccessor.setPropertyValue("group-timeout", aggregationTimeout); 
} 

1 个答案:

答案 0 :(得分:1)

  

我有2个参数用于该策略:超时和大小

好吧,我想你使用TimeoutCountSequenceSizeReleaseStrategy。正如我们所看到的那些params在该类中是最终的,并且它们在运行时实际上无法使用setter进行更改。

只有一种方法可以在运行时更改这些值 - 使用DirectFieldAccessor

但是,如果您分享有关用例,配置和单元测试的更多信息,我们可能会找到其他方法来帮助您。

我已编辑您的帖子以添加您的代码。不,您必须使用不动产名称,因此它应为groupTimeoutExpression,而不是group-timeout。从另一方面来看,有一个关于此问题的公共制定者:AbstractCorrelatingMessageHandler.setGroupTimeoutExpression(Expression groupTimeoutExpression)

从另一方面来说,你的方式有点错误:任何MessageHandler组件(<aggregator><service-activator>)都提供了几个组件。是的,它们的根是AbstractEndpointEventDrivenConsumer的父级)。但是,您所需的所有属性都来自AggregatingMessageHandlerBeanFactory可以使用其别名aggregatorName + ".handler"release-strategy-expression获取。

ExpressionEvaluatingReleaseStrategyDirectFieldAccessor的属性,您可以使用AggregatingMessageHandler上的AggregatingMessageHandler handler = beanFactory.getBean(aggregatorName + ".handler", AggregatingMessageHandler.class); DirectFieldAccessor directFieldAccessor = new DirectFieldAccessor(handler); ReleaseStrategy releaseStrategy = (ReleaseStrategy) directFieldAccessor.getPropertyValue("releaseStrategy"); DirectFieldAccessor dfa = new DirectFieldAccessor(releaseStrategy); dfa.setPropertyValue("expression", ...); 进行更改:

{{1}}

无论如何,目前尚不清楚,为什么你需要这样的变态......