在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