Tôi đang thử nghiệm một lớp trừu tượng và Mockito không khởi tạo biến thành viên của tôi. Đây là một ví dụ đơn giản để cho bạn thấy vấn đề của tôi.Tại sao Mockito bỏ qua việc khởi tạo biến thành viên của lớp trừu tượng của tôi
Đây là một lớp trừu tượng mà khởi 'lĩnh vực' thành viên:
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();
}
Ở đây, lớp thử nghiệm:
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"));
}
}
Khi thử nghiệm đang chạy nó ném một NPE vì lĩnh vực biến ' 'không được khởi tạo!
Tôi đang làm gì sai?
Sử dụng http://docs.mockito.googlecode.com/hg/org/mockito/stubbing/OngoingStubbing.html#thenCallRealMethod%28%29 không được khuyến nghị. Bạn muốn kiểm tra cái gì? Nếu nó là việc thực hiện một số phương pháp của Foo, sau đó chỉ cần tạo một lớp con. Sử dụng Mockito, khi bạn muốn xác minh các cuộc gọi phương thức hoặc hành vi. –
Như tôi đã nói với [@ david-wallace] (http://stackoverflow.com/users/1081110/david-wallace), tôi muốn kiểm tra lớp trừu tượng. Ý định của tôi về sử dụng một mô hình là để ngăn chặn lỗi biên dịch nên lớp trừu tượng, hoặc một trong các giao diện của nó, thay đổi. – Pigelvy