gpt4 book ai didi

java - 基于参数属性的 Mockito 返回值

转载 作者:IT老高 更新时间:2023-10-28 20:36:12 24 4
gpt4 key购买 nike

通常在使用 Mockito 时,我会执行以下操作:

Mockito.when(myObject.myFunction(myParameter)).thenReturn(myResult);

有没有可能做一些类似的事情

myParameter.setProperty("value");
Mockito.when(myObject.myFunction(myParameter)).thenReturn("myResult");

myParameter.setProperty("otherValue");
Mockito.when(myObject.myFunction(myParameter)).thenReturn("otherResult");

所以而不是仅仅使用参数来确定结果。它使用参数内的属性值来确定结果。

所以当代码执行时,它的行为是这样的:

public void myTestMethod(MyParameter myParameter,MyObject myObject){
myParameter.setProperty("value");
System.out.println(myObject.myFunction(myParameter));// outputs myResult

myParameter.setProperty("otherValue");
System.out.println(myObject.myFunction(myParameter));// outputs otherResult
}

这是当前的解决方案,希望可以提出更好的建议。

private class MyObjectMatcher extends ArgumentMatcher<MyObject> {

private final String compareValue;

public ApplicationContextMatcher(String compareValue) {
this.compareValue= compareValue;
}

@Override
public boolean matches(Object argument) {
MyObject item= (MyObject) argument;
if(compareValue!= null){
if (item != null) {
return compareValue.equals(item.getMyParameter());
}
}else {
return item == null || item.getMyParameter() == null;
}
return false;
}
}

public void initMock(MyObject myObject){
MyObjectMatcher valueMatcher = new MyObjectMatcher("value");
MyObjectMatcher otherValueMatcher = new MyObjectMatcher("otherValue");
Mockito.when(myObject.myFunction(Matchers.argThat(valueMatcher))).thenReturn("myResult");
Mockito.when(myObject.myFunction(Matchers.argThat(otherValueMatcher))).thenReturn("otherResult");
}

最佳答案

在 Java 8 中,它甚至比上述所有方法都简单:

when(mockObject.myMethod(anyString()))
.thenAnswer(invocation ->
invocation.getArgumentAt(0, String.class));

关于java - 基于参数属性的 Mockito 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22338536/

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