Java 静态方法的doAnswer-PowerMock
我使用的静态方法之一,它有两个作用。它返回一些数据,但也修改传递给它的参数对象。这个更新的参数对象随后将在代码中使用 我使用PowerMock来模拟返回行为 为了定义第二部分——更新输入参数,我定义了doAnswer方法,但它不起作用。我尝试测试的方法如下所示Java 静态方法的doAnswer-PowerMock,java,mocking,powermock,Java,Mocking,Powermock,我使用的静态方法之一,它有两个作用。它返回一些数据,但也修改传递给它的参数对象。这个更新的参数对象随后将在代码中使用 我使用PowerMock来模拟返回行为 为了定义第二部分——更新输入参数,我定义了doAnswer方法,但它不起作用。我尝试测试的方法如下所示 public void login() throws ConnectionException, AsyncApiException { ConnectorConfig partnerConfig = new ConnectorCo
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<Void>() {
@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)));
}
public void login()引发ConnectionException,AsyncApiException{
ConnectorConfig partnerConfig=新的ConnectorConfig();
//此调用在ParterConfig中的一个成员变量serviceEndPoint中设置值,该值稍后仅在此方法中访问。
partnerConnection=Connector.newConnection(partnerConfig);
//已调用partnerConfig.getServiceEndpoint。
mockStatic(Connector.class);
当(Connector.newConnection(Mockito.any(ConnectorConfig.class)),然后返回(partnerConnection);
PowerMockito.doAnswer(新答案(){
@凌驾
公共无效应答(调用锁调用){
ConnectorConfig config=(ConnectorConfig)invocation.getArguments()[0];
config.setServiceEndpoint(“服务端点”);
返回null;
}
}).when(Connector.newConnection(Mockito.any(ConnectorConfig.class));
}
但上面抛出的错误是“此处检测到未完成的存根”。
Connector
是第三方类,因此我无法控制其行为
有什么建议吗?会出什么问题
PowerMockito.doAnswer(new Answer<Void>() {
/* ... */
}).when(Connector.newConnection(Mockito.any(ConnectorConfig.class)));
PowerMockito进一步要求调用静态方法,如下所示:
Mockito.doAnswer(new Answer<Void>() {
/* ... */
}).when(yourMock).callVoidMethod();
// ^^^^^^
PowerMockito.doAnswer(new Answer<Void>() {
/* ... */
}).when(Connector.class); Connector.newConnection(/*...*/);
// ^^^^^^
PowerMockito.doAnswer(新答案(){
/* ... */
}).when(连接器类);Connector.newConnection(/*…*/);
// ^^^^^^
请注意,从到,文档实际上是不一致的,在时暗指零arg,尽管所有签名至少需要一个类文本
强制性PSA:不过,一般来说,这是一个好主意。thnx for doc link。我明天会试试的。这很有效。我提出了一个错误。主题不是重点,但我似乎无法编辑它。前两个链接我得到404分。@cs\u更新。