0

표현식이있는 라우터를 사용하는 스프링 통합 경로가 있습니다. 이 표현식은 yml 파일에서 설정됩니다. 이 라우터 속성의 값을 수동으로 설정하는 단위 테스트를 만들고 싶지만 작동하지 않는 것 같습니다.프로그래밍 방식으로 스프링 통합 라우터 속성 설정

테스트

@Autowired 
EventDrivenConsumer myrouter; 
..... 
((ExpressionEvaluatingRouter) myrouter.getHandler()).setPrimaryExpression(new SpelExpressionParser().doParseExpression("true")); 

는 XML 컨텍스트의 일부

<int:router input-channel="catchweightExcluderChannel" expression="${rip.config.exclude_catchweight}" default-output-channel="productTransformerChannel"> 
    <int:mapping value="true" channel="catchWeightFilteringChannel" /> 
    <int:mapping value="false" channel="productTransformerChannel" /> 
</int:router> 

그러나 봄의 속성을 변경, 문맥을 읽고 한 번으로 행동에 영향을 미치는되지 오버라이드 내 값이 ... 보인다 보인다 구성 요소가 해당 동작에 영향을 미치지 않습니다.

답변

1

당신은 표현이 ExpressionEvaluatingRouter의 ctor에의 인수 인 방법 때문에 재산 변경할 수 없습니다 : 나는 당신의 시험 사용 케이스에 대한 생각

public class ExpressionEvaluatingRouter extends AbstractMessageProcessingRouter { 

    public ExpressionEvaluatingRouter(Expression expression) { 
     super(new ExpressionEvaluatingMessageProcessor<Object>(expression)); 
     setPrimaryExpression(expression); 
    } 

} 

@TestPropertySource 최고의 솔루션이 될 것입니다 :

@RunWith(SpringRunner.class) 
@TestPropertySource(properties = "rip.config.exclude_catchweight:true") 

UPDATE

하지만 w 숨바꼭질이는

setPrimaryExpression() setPrimaryExpression

및 분석을위한 표현 기반 구성 요소가 많은 청소기 수 있도록 시각화 도구 및 로그에 대한 형제 getExpression()라는 뮤 테이터입니다. 하나의 구성 요소에 여러 표현이있을 수 있으므로 prime과 세터의 해당 이름을 구분하기로 결정했습니다.

우리가 보는 바와 같이, 표현 평가를위한 실제 노력은 여기에있는 ExpressionEvaluatingMessageProcessor에서 이루어집니다.

방법 당 요구 사항에 대해서는 ApplicationContext을 수동으로 만들고 setEnvironment(new MockEnvironment()으로 전화하면됩니다. 그리고 이미 특정 경우에 그 표현식에 원하는 값을 채울 수 있습니다.

응용 프로그램 컨텍스트가 이미 시작된 경우 해당 ctor 기반 초기화를 재정의 할 수 없습니다.

+0

오키, 그것은 constructor arg입니다. 그렇다면 왜 setPrimaryExpression이라는 뮤 테이타가 있습니까? – JonathanVila

+0

TestPropertySource 정보는 클래스 수준의 주석이므로 true와 false 값을 테스트하기 위해 2 가지 방법 대신 2 가지 테스트 클래스를 만들어야합니다. 그래서, 메소드 레벨에 DirtiesContext를 넣을 수는 있지만 메소드 레벨에서 속성을 오버라이드 할 수는 없습니까? – JonathanVila

+0

내 대답은 UPDATE를 참조하십시오. –

관련 문제