Tôi muốn tạo thử nghiệm cho lớp Trình bày của mình nhưng tôi đang gặp sự cố với cá thể CompositeSubscription bên trong chính Trình bày. Khi tôi chạy thử nghiệm tôi nhận được lỗi này:Kiểm tra đơn vị trình bày với RxJava CompositeSubscription
java.lang.NullPointerException
at rx.subscriptions.CompositeSubscription.add(CompositeSubscription.java:60)
at com.example.Presenter.addSubscription(Presenter.java:67)
at com.example.Presenter.getGummyBears(Presenter.java:62)
Đây là khoảng lớp học của tôi trình bày:
public class Presenter {
CompositeSubscription compositeSubscription = new CompositeSubscription();
//creation methods...
public void addSubscription(Subscription subscription) {
if (compositeSubscription == null || compositeSubscription.isUnsubscribed()) {
compositeSubscription = new CompositeSubscription();
}
compositeSubscription.add(subscription);
}
public void getGummyBears() {
addSubscription(coreModule.getGummyBears());
}
}
Các CoreModule là một giao diện (một phần của một mô-đun khác nhau) và có là một lớp CoreModuleImpl khác trong đó có tất cả các cuộc gọi API trang bị thêm và chuyển đổi của chúng thành Đăng ký. Cái gì như:
@Override public Subscription getGummyBears() {
Observable<GummyBears> observable = api.getGummyBears();
//a bunch of flatMap, map and other RxJava methods
return observable.subscribe(getDefaultSubscriber(GummyBear.class));
//FYI the getDefaultSubscriber method posts a GummyBear event on EventBus
}
Bây giờ những gì tôi muốn làm là để thử nghiệm các phương pháp getGummyBears()
. phương pháp thử nghiệm của tôi trông như thế này:
@Mock EventBus eventBus;
@Mock CoreModule coreModule;
@InjectMock CoreModuleImpl coreModuleImpl;
private Presenter presenter;
@Before
public void setUp() {
presenter = new Presenter(coreModule, eventBus);
coreModuleImpl = new CoreModuleImpl(...);
}
@Test
public void testGetGummyBears() {
List<GummyBears> gummyBears = MockBuilder.newGummyBearList(30);
//I don't know how to set correctly the coreModule subscription and I'm trying to debug the whole CoreModuleImpl but there are too much stuff to Mock and I always end to the NullPointerException
presenter.getGummyBears(); //I'm getting the "null subscription" error here
gummyBears.setCode(200);
presenter.onEventMainThread(gummyBears);
verify(gummyBearsView).setGummyBears(gummyBears);
}
Tôi đã thấy nhiều ví dụ thử nghiệm từ các dự án khác nhau nhưng không ai đang sử dụng phương pháp đăng ký này. Họ chỉ trả lại Observable được tiêu thụ trực tiếp bên trong người trình bày. Và trong trường hợp đó, tôi biết cách viết một bài kiểm tra.
Cách chính xác để kiểm tra tình huống của tôi là gì?
Bạn có trình bày lấy 'CoreModule' trong hàm tạo không? – skywall
yep xin lỗi tôi quên thêm dòng này 'presenter = new Presenter (coreModule, eventBus) 'trong phương thức' setUp' – nicopasso
hi @nicopasso bạn có thể tìm cách giải quyết nó không? –