我想測試一個抽象類,Mockito不初始化我的成員變量。這裏有一個簡單的例子來向你展示我的問題。爲什麼Mockito跳過我的抽象類的成員變量的初始化
這是一個抽象類,初始化其「場」成員:
import java.util.ArrayList;
import java.util.Collection;
public abstract class Foo {
private final Collection field = new ArrayList();
protected Foo() {
System.out.println("In constructor");
}
public boolean isNull(Object o) {
field.add(o);
return o == null;
}
abstract void someAbstractMethod();
}
這裏測試類:
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
public class FooTest {
@Test
public void testSomething() {
final Foo foo = Mockito.mock(Foo.class);
Mockito.when(foo.isNull(Mockito.anyObject())).thenCallRealMethod();
Assert.assertFalse(foo.isNull("baaba"));
}
}
當測試運行它拋出一個NPE因爲變量「字段'沒有初始化!
我在做什麼錯?
不建議使用http://docs.mockito.googlecode.com/hg/org/mockito/stubbing/OngoingStubbing.html#thenCallRealMethod%28%29。你想測試什麼?如果是Foo的某些方法的實現,那麼只需創建一個子類。當你想驗證行爲或存根方法調用時,使用Mockito。 –
正如我對[@ david-wallace](http://stackoverflow.com/users/1081110/david-wallace)所說的,我想測試抽象類。我使用模擬的意圖是爲了防止抽象類或其接口之一發生更改時出現編譯錯誤。 – Pigelvy