我有一个JUnit测试,如下所示,但它在when().then()
上抛出InvalidUseOfMatchers
错误。我试着把它替换成:
when(any(MyUtilityClass.class).inheritedMethod(anyMap(), anyString())).thenReturn(anyString());
然后抛出NullPointer
。那么,我该如何解决这个问题呢?
MyUtilityClassTest
@ExtendWith(MockitoExtension.class)
public class MyUtilityClassTest {
@InjectMocks
private MyUtilityClass muc;
@Test
void test() {
when(muc.inheritedMethod(anyMap(), anyString())).thenReturn(anyString()); //invalid use of matchers error
var response = muc.getData();
assertEquals("EXPECTED_VALUE", response.getValue());
}
}
MyUtilityClass
public MyUtilityClass extends AbstractParentClass {
@Value("${value}")
private String value;
public DataClass getData() {
var data = DataClass.builder().build();
data.setValue( inheritedMethod(new HashMap<String, Object>(), value) );
return data;
}
}
您的模拟语句是与多。但这里不是InjectedMock模拟对象。要模拟一个类,可以使用@Mock或@Spy。但是,当您依赖于其他类时,则使用mock对象。但根据你的代码,你正在测试MyUtilityClass和它似乎继承的方法也在同一个类。我认为你不需要mock任何东西,除非你有其他类的依赖。