java模拟getClass()
在Java中,我想为方法编写测试(简化代码段):
public class MyClass {
private static final Set<Class> SOME_SET = new HashSet<Class>(Arrays.asList(Foo.class, Bar.class));
public boolean isValid(Class clazz){
return SOME_SET.contains(clazz);
}
}
以下测试的问题
import static org.mockito.Mockito.when;
import org.mockito.Mockito;
public class MyClassTest {
@Test
public void isValid_Foo_returnsTrue(){
Foo foo = Mockito.mock(Foo.class);
MyClass target = new MyClass();
assertTrue(target.isValid(foo));
}
}
在模拟类Foo上,foo.getClass()
返回带有附加后缀的类名。比如:
Foo$$EnhancerByMockitoWithCGLIB$$45508b12
由于这个原因,测试失败,因为一些设置。contains(clazz)返回false
我无法在Foo上模拟getClass()方法:
Mockito.when(foo.getClass()).thenReturn(Foo.class);
因为我在抱怨: 然后返回方法(Class<;capture#1-of?扩展了Foo>;)在OngoingStubing类型中<;阶级<;捕获#1-of?扩展Foo>>;不适用于参数(Class<;Foo>;)
问题是,如何实现模拟对象的getClass()方法返回与真实(非模拟)对象的getClass()方法相同的值
共 (0) 个答案