[英]Mocking method with final arguments
我有一些在 ServiceClassA 中使用最終字符串 arguments 的方法。
@Service
public class ServiceClassA {
public String callingMethod(final String argOne, final String argTwo) {
//Implementation here
}
}
並且它在另一個 class 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 中模擬 callingMethod 時,它返回 null 而不是“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);
}
}
我嘗試了以下幾種方法,它總是返回 null。但我想獲得成功作為結果。
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
問題是您將@RunWith(MockitoJUnitRunner.class)與MockitoAnnotations.initMocks(this ) 一起使用。 他們是矛盾的。
使用一個MockitoJUnitRunner
或MockitoAnnotations.initMocks
。
MockitoJUnitRunner 初始化用 Mock 注釋的模擬,因此不需要顯式使用 MockitoAnnotations.initMocks(Object)。 在每個測試方法之前初始化模擬。
工作測試:
@RunWith(MockitoJUnitRunner.class)
public class ServiceClassBTest {
@InjectMocks
private ServiceClassB serviceClassB;
@Mock
private ServiceClassA serviceClassA;
@Test
public void methodB_success(){
String result = "SUCCESS";
when(serviceClassA.callingMethod(Mockito.anyString(), Mockito.anyString())).thenReturn(result);
serviceClassB.methodB();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.