我正在尝试模拟一个通用方法,但无论我尝试什么,都会得到类转换异常。正在测试的类是
public class TClass {
private byte[] data;
public <T extends SInterface> T asObject(T item){
item.SMethod(this.getData());
return item;
}
private byte[] getData() {
return data;
}
}
而测试类是
@RunWith(MockitoJUnitRunner.class)
public class TClassTest {
@Mock
SSInterface sClass;
@Mock
SObject sObject;
TClass tClass = new TClass();
@org.junit.Before
public void setUp() throws Exception {
}
@org.junit.Test
public void asObject() {
Mockito.when(tClass.asObject(new SSClass())).thenReturn(sClass);
}
}
其他帮助类和接口是:
public interface SInterface {
public void SMethod(byte[] in);
}
public interface SSInterface extends SInterface {
}
public class SSClass implements SSInterface {
@Override
public void SMethod(byte[] in) {
}
}
public class SObject {
}
我得到的错误是:
无法解析方法 thenReturn(generic.SSInterface)
如果我使用 Mockito.when(tClass.asObject(new SSClass())).thenReturn(new SSClass());
我得到 org.mockito.exceptions.misusing.MissingMethodInvocationException: when() 需要一个必须是“模拟方法调用”的参数。例如:when(mock.getArticles()).thenReturn(articles);
此外,出现此错误的原因可能是: 1. 您存根了以下任一方法: final/private/equals()/hashCode() 方法。这些方法不能被存根/验证。不支持在非公共父类上声明的模拟方法。2. 在 when() 中,您不会在模拟上调用方法,而是在其他对象上调用方法。
守着一只汪
慕后森
相关分类