gpt4 book ai didi

java - 如何在不运行方法的情况下模拟方法调用和返回值?

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:14 28 4
gpt4 key购买 nike

考虑以下方法:

public boolean isACertainValue() {
if(context.getValueA() != null && context.getValueA().toBoolean() == true) {
if(context.getType() != null && context.getType() == ContextType.certainType) {
return true;
}
}
return false;
}

这段代码不是我写的,它丑得要命,太复杂了,但我必须使用它。

现在我想测试一个依赖于调用此方法的方法。

我认为我可以通过以下方式处理这个问题:

Mockito.when(spy.isACertainValue()).thenReturn(true); 因为这就是我想要测试的情况。

但它不起作用,因为它仍在调用方法体:/

我得到了空指针或者更确切地说我得到了一些类似

的东西

misusing.WrongTypeOfReturnValue; Boolean cannot be returned by getValueA(). getValueA() should return ValueA

所以我尝试(作为解决方法)这样做:

Mockito.when(contextMock.getValueA()).thenReturn(new ValueA());Mockito.when(contextMock.getType()).thenReturn(ContextType.certainType);

但随后我得到一个我似乎无法调试的空指针。

那么,在这种情况下如何正确完成呢?

最佳答案

调用时

Mockito.when(spy.isCertainValue()).thenReturn(true);

方法 isCertainValue() 在这里被调用。这就是 Java 的工作方式:要评估 Mockito.when 的参数,必须评估 spy.isCertainValue() 的结果,因此必须调用该方法。

如果您不希望这种情况发生,您可以使用 the following construct :

Mockito.doReturn(true).when(spy).isCertainValue();

这将具有相同的模拟效果,但不会调用该方法。

关于java - 如何在不运行方法的情况下模拟方法调用和返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34308877/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com