Java 静态方法的doAnswer-PowerMock

Java 静态方法的doAnswer-PowerMock,java,mocking,powermock,Java,Mocking,Powermock,我使用的静态方法之一,它有两个作用。它返回一些数据,但也修改传递给它的参数对象。这个更新的参数对象随后将在代码中使用 我使用PowerMock来模拟返回行为 为了定义第二部分——更新输入参数,我定义了doAnswer方法,但它不起作用。我尝试测试的方法如下所示 public void login() throws ConnectionException, AsyncApiException { ConnectorConfig partnerConfig = new ConnectorCo

我使用的静态方法之一,它有两个作用。它返回一些数据,但也修改传递给它的参数对象。这个更新的参数对象随后将在代码中使用

我使用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<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更新。