java可以用answer_java – 针对静态方法的doAnswer – PowerMock

我正在使用的一种静态方法,它做了两件事.它返回一些数据,但它也修改传递给它的参数对象.然后在代码中使用此更新的参数对象.

我正在使用PowerMock来模拟返回行为.

为了定义第二部分 – 更新输入参数,我正在定义doAnswer方法,但它不起作用.我正在尝试测试的方法看起来像这样.

public void login() throws ConnectionException, AsyncApiException {

ConnectorConfig partnerConfig = new ConnectorConfig();

//This call sets the value in one member variable 'serviceEndPoint in ParterConfig which is accessed later in this method only.

partnerConnection = Connector.newConnection(partnerConfig);

//partnerConfig.getServiceEndpoint is called.

PowerMockito.mockStatic(Connector.class);

when(Connector.newConnection(Mockito.any(ConnectorConfig.class))).thenReturn(partnerConnection);

PowerMockito.doAnswer(new Answer() {

@Override

public Void answer(InvocationOnMock invocation) {

ConnectorConfig config = (ConnectorConfig) invocation.getArguments()[0];

config.setServiceEndpoint("service end point");

return null;

}

}).when(Connector.newConnection(Mockito.any(ConnectorConfig.class)));

}

但是上面抛出的错误说’在这里检测到未完成的短截’.

Connector是第三方类,所以我无法控制它的行为.

有什么建议,可能会出错吗?

解决方法:

PowerMockito.doAnswer(new Answer() {

/* ... */

}).when(Connector.newConnection(Mockito.any(ConnectorConfig.class)));

你什么时候出问题.在普通的Mockito中,使用任何doAnswer / doReturn / etc调用,你必须将调用之外的调用放在调用之外,如下所示:

Mockito.doAnswer(new Answer() {

/* ... */

}).when(yourMock).callVoidMethod();

// ^^^^^^

PowerMockito进一步要求对静态方法的调用发生在in the next statement,如下所示:

PowerMockito.doAnswer(new Answer() {

/* ... */

}).when(Connector.class); Connector.newConnection(/*...*/);

// ^^^^^^

请注意,documentation I linked实际上是不一致的 – 看起来文档提到了零arg时,而在可用的签名中需要类文字.如果你有一个时刻,那么标记为错误可能是件好事.

标签:java,mocking,powermock

来源: https://codeday.me/bug/20191005/1855799.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值