【发布时间】:2015-03-18 05:13:43
【问题描述】:
我正在尝试编写一个 IntegrationFlow 测试。它是这样的:
JMS(in) -> (在 db 中查找以前的版本) -> reduce(in,1...n) -> (to db) -> JMS(out)
所以,毫不奇怪:我想模拟数据库调用;他们是道豆。但是,我也希望它通过组件扫描来获取其他 bean;我会选择性地扫描除 dao 之外的所有包。
- 创建一个测试配置并模拟 Daos。没问题
- 按照 Spring Boot 说明进行测试以获取组件扫描的 bean。没问题
我只想验证步骤顺序和结果输出,因为出站 JMS 队列会看到它。有人可以帮我填空吗?
这不能强硬!使用模拟似乎是有问题的,因为许多基本字段都是最终的。我到处都在阅读这方面的信息,只是没有找到一条清晰的道路。我继承了这个代码顺便说一句
我的错误:
org.springframework.integration.MessageDispatchingException: Dispatcher 没有订阅者
这是我的代码
@Configuration
@ImportResource("classpath:retry-context.xml")
public class LifecycleConfig {
@Autowired
private MessageProducerSupport inbound;
@Autowired
private MessageHandler outbound;
@Autowired
@Qualifier("reducer")
private GenericTransformer<Collection<ExtendedClaim>,ExtendedClaim> reducer;
@Autowired
@Qualifier("claimIdToPojo")
private GenericTransformer<String,ClaimDomain> toPojo;
@Autowired
@Qualifier("findPreviousVersion")
private GenericTransformer<ExtendedClaim,Collection<ExtendedClaim>> previousVersions;
@Autowired
@Qualifier("saveToDb")
private GenericHandler<ExtendedClaim> toDb;
@Bean
public DirectChannel getChannel() {
return new DirectChannel();
}
@Bean
@Autowired
public StandardIntegrationFlow processClaim() {
return IntegrationFlows.from(inbound).
channel(getChannel()).
transform(previousVersions).
transform(reducer).
handle(ExtendedClaim.class,toDb).
transform(toPojo).
handle(outbound).get();
}
}
测试配置
@Configuration
public class TestConfig extends AbstractClsTest {
@Bean(name = "claimIdToPojo")
public ClaimIdToPojo getClaimIdToPojo() {
return spy(new ClaimIdToPojo());
}
@Bean
public ClaimToId getClaimToIdPojo() {
return spy(new ClaimToId());
}
@Bean(name = "findPreviousVersion")
public FindPreviousVersion getFindPreviousVersion() {
return spy(new FindPreviousVersion());
}
@Bean(name = "reducer")
public Reducer getReducer() {
return spy(new Reducer());
}
@Bean(name = "saveToDb")
public SaveToDb getSaveToDb() {
return spy(new SaveToDb());
}
@Bean
public MessageProducerSupport getInbound() {
MessageProducerSupport mock = mock(MessageProducerSupport.class);
// when(mock.isRunning()).thenReturn(true);
return mock;
}
@Bean
public PaymentDAO getPaymentDao() {
return mock(PaymentDAO.class);
}
@Bean
public ClaimDAO getClaimDao() {
return mock(ClaimDAO.class);
}
@Bean
public MessageHandler getOutbound() {
return new CaptureHandler<ExtendedClaim>();
}
}
实际测试不会加载
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfig.class, LifecycleConfig.class})
public class ClaimLifecycleApplicationTest extends AbstractClsTest {
@Autowired
private MessageHandler outbound;
@Autowired
@Qualifier("reducer")
private GenericTransformer<Collection<ExtendedClaim>,ExtendedClaim> reducer;
@Autowired
@Qualifier("claimIdToPojo")
private GenericTransformer<String,ClaimDomain> toPojo;
@Autowired
@Qualifier("findPreviousVersion")
private GenericTransformer<ExtendedClaim,Collection<ExtendedClaim>> previousVersions;
@Autowired
@Qualifier("saveToDb")
private GenericHandler<ExtendedClaim> toDb;
@Autowired
private DirectChannel defaultChannel;
@Test
public void testFlow() throws Exception {
ExtendedClaim claim = getClaim();
Message<ExtendedClaim> message = MessageBuilder.withPayload(claim).build();
List<ExtendedClaim> previousClaims = Arrays.asList(claim);
defaultChannel.send(message);
verify(previousVersions).transform(claim);
verify(reducer).transform(previousClaims);
verify(toDb).handle(claim, anyMap());
verify(toPojo).transform(claim.getSubmitterClaimId());
verify(outbound);
}
}
【问题讨论】:
标签: java spring mocking mockito spring-integration