当前位置: 首页 > 知识库问答 >
问题:

朱尼特

壤驷阳冰
2023-03-14

我正在使用Mochito,无法返回使用MarshallSendReceive进行的api调用的模拟响应。

以下是服务api调用(其中serviceRequest的类型为ValidateRequest,HeaderComposingCallback实现WebServiceMessageCallback)

public class ValidateClient extends WebServiceGatewaySupport {
   ...
    ValidateResponse serviceResponse = (ValidateResponse) getWebServiceTemplate().marshalSendAndReceive(
                serviceRequest, new HeaderComposingCallback(reqId));
   ..
}

这里是JUnit测试中的模拟,validateResponse是创建的对象,填充了值,但在运行下面的单元测试时,代码总是返回空响应。

@RunWith(MockitoJUnitRunner.class)
public class ValidateServiceTest {
    @Mock
    WebServiceTemplate template;
    ....    
    when(template.marshalSendAndReceive(any(ValidateRequest.class),(WebServiceMessageCallback) any(HeaderComposingCallback.class))).thenReturn(validateResponse);
    ..
}

预期将接收非空对象的validateResponse。

共有2个答案

安浩瀚
2023-03-14

要找到原因,我们必须查看方法getWebServiceTemplate(),但肯定有问题(您不是从template中调用marshalSendAndReceive(),而是从方法getWebServiceTemplate中的实例定义为测试类中的字段)。你可以试着嘲笑它:

@RunWith(MockitoJUnitRunner.class)
public class ValidateServiceTest {
    @Spy
    ValidateService validateService;
    @Mock
    WebServiceTemplate template;
    ....    
    when(validate.getWebServiceTemplate()).thenReturn(template);
    when(template.marshalSendAndReceive(any(ValidateRequest.class),(WebServiceMessageCallback) any(HeaderComposingCallback.class))).thenReturn(validateResponse);
    ..
}
贺玉石
2023-03-14

WebServiceGatewaySupport在其构造函数中创建WebServiceTemplate的新实例。

确保你打过电话:

public final void setWebServiceTemplate(WebServiceTemplate webServiceTemplate)

将你的模拟注入你的WebServiceGatewaySupport

 类似资料:
  • 我使用Maven、Java10、Spring Boot2和JUnit5创建带有单元测试的应用程序。 请帮帮我.

  • 侯会计是个与众不同的人。比如有人向你提意见,认为你错了,你大概会想:我哪里会错呢?肯定是你自己错了吧,理由如此如此这般这般。但是如果一百个人向你提意见,认为你错了,你大概就会想:也许我真的错了。 但侯会计不是这样的,哪怕是全世界的人都向她提意见,她也会固执地认为全世界的人都不对,都不理解她。要是只有一个人向她提意见,又不一样了,她多半认为这人肯定跟自己有仇,一定要狠狠地打击报复。 抱着这样的心理,

  • 从junit4迁移到junit5时 之前我已经添加了所有的测试方法 但我得到的错误为:org.junit.jupiter.api.extension.ParameterResolution异常:没有ParameterResolver注册参数 感谢您的帮助!

  • 我是新来的单元测试,我一直致力于这个教程,我在互联网上找到: http://blog.fedecarg.com/2008/12/27/testing-zend-framework-controllers/ 我的问题是我根本无法执行教程中显示的测试! C :\wamp\www\portailmg\dev\test 从C:\wamp\www\portailmg\dev\tests\phpunit.xm

  • 在所有测试之前,需要将数据插入数据库 完成所有测试后,需要从数据库中删除所有数据 在TestNG中,可以使用@BeforeSuite和@AfterSuite来完成这些工作 在JUnit5中如何做这些事情? 在JUnit5中,@BeforeAll注释标记了一个方法,该方法在类中的所有测试之前运行 @AfterAll注释标记要在类中的所有测试之后运行的方法。 我在stackoverflow上找到了以下