在Java中,我想写的方法测试(简单的代码片段):嘲讽的getClass()
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
失败,因为SOME_SET.contains(clazz所)返回假。
我无法嘲笑的getClass()方法上的Foo:
Mockito.when(foo.getClass()).thenReturn(Foo.class);
由于编译器抱怨:(?类<捕获#1-延伸美孚>) 方法thenReturn在type OngoingStubbing <类< capture#1 of?延伸的Foo > >不适用的参数(<类Foo >)
问题是,怎么实现的getClass()嘲笑对象返回的值相同的getClass()真实的方法的方法(非嘲笑)对象?
嗯......你的问题出了什么问题。 isValid期望一个类作为它的参数。但是你在测试中传递一个对象。 –
你说得对,当我简化了这个例子时,我犯了一个错误。它应该是公共布尔值isValid(Object object){return 0; SOME_SET.contains(object.getClass()); } – zoran