Camel单元测试 - 我们如何编写单元测试来断言调用bean的特定方法?

时间:2017-10-30 08:24:48

标签: java unit-testing apache-camel

在Camel中,通过使用camel-test和Mock Endpoints,我不知道如何断言处理器或Bean的特定方法已被调用?

例如,假设我有一个带有多种方法的bean ProductService来获取产品列表或更新现有产品,以下是在路径中调用服务方法的代码:

boolean methodIsInvoked = false;

public void setMethodInvocation(){
     methodIsInvoked = true;
}

when(productService.getAllProducts(any())).thenAnswer((Answer<Boolean>) invocation -> {
       setMethodInvocation();
       return listOfProducts;
});

template.sendBody(...)

assertTrue(methodIsInvoked)

如何断言已调用productService的getAllProducts方法?

我当前的方法是使用thenAnswer调用一个设置标志的方法,以注意该方法已被调用。但我想知道这不是一个好方法:

ls . `
| select @{ Name="Dir"; Expression = { $_ | Split-Path } } `
| select -ExpandProperty Dir

1 个答案:

答案 0 :(得分:2)

当使用像mockito这样的模拟框架时,您可以在Spring测试环境中模拟ProductService:

@Bean
public ProductService mockedProductService() {
    return Mockito.mock(ProductService.class);
}

在你的测试类中断言你预期的调用量如下:

verify(mockedProductService, times(1)).getAllProducts();