【问题标题】:Mocking config with spring boot isn't picking up property files使用 Spring Boot 模拟配置不会获取属性文件
【发布时间】: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


    【解决方案1】:

    有很多特定于域的对象,因此我无法对其进行测试以重现或发现您的代码的其他问题。

    但我发现您没有在 @Configurations 课程中使用 @EnableIntegration

    【讨论】:

    • 好的,让我看看。而且,至于域的东西:是的,你是对的。我已经束手无策了
    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 2018-04-28
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多