我希望能够测试一条从队列中消耗的路由,然后在涉及spring注入服务的bean中进行一些工作,并使用mockito有效地模拟该服务。
我的Spring路线如下:
<camel:route id="msgemailqueue-to-emailservice">
<camel:from uri="activemq:emails" />
<camel:bean ref="emailService" method="createEmailRequest"/>
</camel:route>
emailService bean有一个自动连接的服务,然后在createEmailRequest()中调用该服务,该服务将转到另一个服务并检索用户数据以供后续使用。
测试:
@RunWith(MockitoJUnitRunner.class)
public class TroubledEmailServiceImplTest extends CamelSpringTestSupport {
@Produce(context = "messagingCamelContext")
protected ProducerTemplate producer;
@Mock
private UserRestService userRestService;
@Override
protected AbstractApplicationContext createApplicationContext() {
return new ClassPathXmlApplicationContext("messaging-camel-route-test-context.xml");
}
@Test
public void testUserResponseToEmailQueue() throws Exception {
context.addRoutes(new MyDynamcRouteBuilder(context, "direct:addEmailRequest", "activemq:emails"));
Mockito.when(userRestService.getUserById(Mockito.anyLong())).thenReturn(
new WebServiceResult<UserVO>(new UserVO()));
CreateMessageRequest msgReq = new CreateMessageRequest();
producer.sendBody("direct:addEmailRequest", msgReq);
Mockito.verify(userRestService).getUserById(Mockito.anyLong());
assertMockEndpointsSatisfied();
}
bean如下:
@Override
public void createEmailRequest(final CreateMessageRequest request) throws CreateEmailException {
LOGGER.trace("Entering createEmailRequest(request) " + Arrays.asList(new Object[] { request }));
Validate.notNull(request, "CreateMessageRequest was null");
WebServiceResult<UserVO> response;
try {
response = userRestService.getUserById(request.getId());
} catch (final WebServiceException e) {
throw new CreateEmailException("Error lookup up user data for email", e);
}
final UserVO userResponse = response.getData();
所有编译都正常,当运行路由时,队列上弹出一个对象,然后将其传递给bean,调用createEmailRequest,对mockito mocked服务的调用正常
response = userRestService.getUserById(request.getId());
但是,即使
Mockito.when(userRestService.getUserById(Mockito.anyLong())).thenReturn(
new WebServiceResult<UserVO>(new UserVO()));
在测试中进行了测试。bean中的服务似乎是另一个实例,即mockito mock从未被调用。
我做了一些错误的事情,也许我的测试方法也是错误的,但是这在理论上应该有效吗?我真的很想能够在我的骆驼路线上模拟出一个豆子里的服务。
我已经解决了这个问题——我的错。我的测试类有效地创建了两个服务实例——一个是通过Spring应用程序上下文,另一个是由于@RunBy(MockitoJUnitRunner.class)加上@mock注释。现在通过做一次模拟创建来解决。总而言之,这只是我的一个Spring布线问题。非常感谢@mike-pone。
您在测试中创建的模拟userRestService必须与您在bean中使用的实例相同。我看不到您在哪里为createEmailRequest方法设置userRestService。该服务需要与您在测试中创建的模拟对象相同。
我正在使用Camel增强型Spring测试,并且已经通过了相同的问题。我只把@Mock
改成了@MockBean
。我的骆驼版本是2.18。
问题内容: 我正在使用JavaScript测试运行程序“摩卡”。 我的测试失败了,因此我将使用进行调试。 但是运行测试时,没有输出(仅来自Mocha的测试结果)。看来Mocha已捕获并抑制了我的输出! 如何让Mocha显示输出?(对于失败的测试)? 编辑: 抱歉!- 在测试期间可以正常工作!我肯定一直期望它抑制输出,而且我没有正确检查自己的代码。感谢您的回应。所以…话虽如此…也许抑制通过测试的输出
如何使用GoogleChrome的postman插件使用POST将FormData()对象发送到webapi。FormData()对象具有附加到其上的表单字段个人ID和MessageBody。我尝试过这样的东西,但没有用:
我有一个类需要进行单元测试: 我有一个测试用例: 当我运行测试用例时,没有使用ActiveMQConnectionFactory的模拟对象。相反,正在使用实际的实现,并且正在建立TCP连接: 我尝试了Powermockito和Mockito,但都失败了。如何模拟对象,如何成功运行测试用例? 我是单元测试新手,试图从各个社区获得帮助,但没有找到合适的答案。任何帮助都将不胜感激。谢谢
问题内容: 当我使用命令:mvn test时,maven使用主要资源而不是src / test / resources中的测试资源。 我如何才能使Maven使用测试资源而不是主要资源? 编辑:我使用Classloader查找我的资源。Classloader可以从我的src / test / resources目录中找到资源,但是它首先在src / main / java中查找该资源。 还是在运行将
问题内容: 我正在GoLang中为一个简单的REST服务编写测试。但是,因为我使用julienschmidt / httprouter 作为路由库。我正在努力编写测试。 main.go 控制器 我的问题是:当GetBook既不是HttpHandler也不是HttpHandle时如何测试呢? 如果我使用传统的处理程序,这样的测试将很容易 问题是,httprouter不是处理程序,也不是handlef
全部: 我对Jasmine测试非常陌生,我想知道的一个关于异步测试的问题是: 有谁能简单解释一下Jasmine是如何知道里面有一个done()函数调用并等待它完成的? 例如,如果我把一些异步调用在之前: Jasmine怎么知道它应该让规范测试等待? 谢谢
我有一个创建标准ubuntu容器的基本DockerFile。我将如何配置ansible主机以便针对docker容器运行它?另外,我怀疑我需要“运行”docker容器以允许ansible连接到它。
我想在@DataMongoTest中使用。我不能在@ContextConfiguration中添加它,因为它是一个接口。 我最后做了以下几件事: 这是可行的,但是我不喜欢我需要设置基本包的这个String值的事实。有趣的是,仅靠是行不通的。 在单元测试中是否有另一种方法来实例化?