如何使用mockito模拟构建器

2024-06-20

我有一个建造者:

class Builder{
     private String name;
     private String address;
     public Builder setName(String name){
         this.name = name;
         return this;
    }
     public Builder setAddress(String address){
         this.address = address;
         return this;
    }

}

在mockito中模拟构建器将为每个方法提供null。那么有没有一种简单的方法可以让构建器在每次函数调用时返回自身,而无需使用when().thenReturn.


使用 RETURN_DEEP_STUBS 的问题是每次调用方法时都会得到不同的模拟。我认为从你的问题来看,你想要使用一个默认答案,对于每个具有正确返回类型的方法,它实际上返回调用它的模拟。这可能类似于以下内容。请注意,我尚未对此进行测试,因此它可能包含拼写错误,但我希望无论如何其意图都是明确的。

import static org.mockito.Mockito.RETURNS_DEFAULTS;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

public class SelfReturningAnswer implements Answer<Object> {

    public Object answer(InvocationOnMock invocation) throws Throwable {
        Object mock = invocation.getMock();
        if(invocation.getMethod().getReturnType().isInstance(mock)){
            return mock;
        }
        return RETURNS_DEFAULTS.answer(invocation);
    }
}

然后,当您创建模拟时,请将其指定为默认答案。这将使您的模拟从它可以的每个方法中返回自身;但是当您调用返回类型对于模拟而言错误的方法时,它的行为将像普通模拟一样。

像这样创建你的模拟

Builder mockBuilder = mock( Builder.class, new SelfReturningAnswer());

或者为此类创建一个常量并编写类似的内容

@Mock(answer = SELF_RETURNING) private Builder mockBuilder;

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用mockito模拟构建器 的相关文章

随机推荐