我有一些方法在ServiceClassA中使用了final String参数。
@Service
public class ServiceClassA {
public String callingMethod(final String argOne, final String argTwo) {
//Implementation here
}
}
以及它在另一个类ServiceClassB中的另一个方法内的调用。
@Service
public class ServiceClassB {
private final ServiceClassA serviceClassA;
public MyResponse methodB() {
String inputOne = "111";
String inputTwo = MyEnum.AAA.getDescription();
final String result = serviceClassA.callingMethod(inputOne,inputTwo);
//some implementations
MyResponse response = new MyResponse();
//set values to response
return response;
}
}
还存在一个枚举。
public enum MyEnum {
AAA(1, "AAA"), BBB(2,"BBB");
private static final Map<Integer, MyEnum> MYENUM_MAP = new HashMap<>();
static {
for (MyEnum myEnum : values()) {
MYENUM_MAP.put(myEnum.getValue(), myEnum);
}
}
private final int value;
private final String description;
private MyEnum(int value, String description) {
this.value = value;
this.description = description;
}
public String getDescription() {
return description;
}
public int getValue() {
return value;
}
}
我正在使用mockito和JUnit测试ServiceClassB。当我尝试模拟调用ServiceClassA中的方法时,它返回空值而不是“SUCCESS”。
@RunWith(MockitoJUnitRunner.class)
public class ServiceClassBTest {
@InjectMocks
private ServiceClassB serviceClassB;
@Mock
private ServiceClassA serviceClassA;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void methodB_success(){
String result = "SUCCESS";
when(serviceClassA.callingMethod(Mockito.anyString(), Mockito.anyString())).thenReturn(result);
}
}
我试了几种方法,结果都是空的。但是我想得到的结果是成功。
when(myService.callingMethod(Mockito.anyString(), Mockito.anyString())).thenReturn(result); //return null
when(myService.callingMethod(Mockito.any(), Mockito.any())).thenReturn(result); //return null
when(myService.callingMethod(ArgumentMatchers.anyString(), ArgumentMatchers.anyString())).thenReturn(result); //return null
doReturn(result).when(myService).callingMethod(Mockito.anyString(), Mockito.anyString()); //return null
1条答案
按热度按时间ffscu2ro1#
这里的问题是,您将@RunWith(MockitoJUnitRunner.class)与MockitoAnnotations.initMocks(this)一起使用,它们是冲突的。
使用
MockitoJUnitRunner
或MockitoAnnotations.initMocks
中的一个。MockitoJUnitRunner初始化用Mock注解的模拟,这样就不需要显式使用MockitoAnnotations.initMocks(Object)。模拟在每个测试方法之前初始化。
工作试验: