Mockito tạo một cá thể proxy khi một số thứ được theo dõi. Bây giờ, có cách nào để chuyển tiếp các setters sau đó được thực thi trên cá thể proxy đó tới thực thể thực sự nằm đằng sau nó không?Làm thế nào để theo dõi đúng hoạt động
Lý do: Tôi có một cá thể đối tượng mà tôi không hoàn toàn nằm dưới sự kiểm soát của tôi, tức là hoạt động trên Android. Tôi có thể cung cấp cho hầu hết các phần của ứng dụng phiên bản proxy và chạy tốt như nhưng vì tôi cần tạo gián điệp/proxy rất sớm trong giai đoạn tạo hoạt động, nó chưa được khởi tạo đầy đủ, ví dụ: bối cảnh cơ bản không được đính kèm. Điều này xảy ra trên cá thể proxy và dĩ nhiên không được sử dụng bởi cá thể hoạt động (chính nó đề cập đến chính nó qua Activity.this
). Kết quả cuối cùng là điều này dẫn đến tất cả các loại sự cố vì giải quyết tài nguyên xảy ra thông qua bối cảnh cơ sở này, do đó, máy móc Fragment nội bộ ném NPE và hơn thế nữa.
Dưới đây là một số mã:
public class CustomAndroidJUnitRunner extends AndroidJUnitRunner {
@Override
public Activity newActivity(ClassLoader cl, String className, Intent intent)
throws InstantiationException, IllegalAccessException, ClassNotFoundException {
Activity activity = super.newActivity(cl, className, intent);
return maybeStubSomeDelegate(activity);
}
private Activity maybeStubSomeDelegate(Activity activity) {
if (!(activity instanceof SomeDelegate)) {
return activity;
}
Activity spiedActivity = spy(activity);
doReturn(SomeDelegateMock.getInstance())
.when((SomeDelegate) spiedActivity)
.getDelegate();
return spiedActivity;
}
}
Tôi tránh khỏi thất bại - bất kỳ ý tưởng?
Tại sao bạn không dùng cà phê: https://google.github.io/android-testing-support-library/docs/espresso/ Vì vậy, bạn cũng có thể kiểm soát hoạt động. –
Tôi đã sử dụng Espresso, điều này không liên quan gì đến câu hỏi của tôi. –
đang thêm phương thức @VisibleForTesting setDelegate() vào hoạt động của bạn ngoài câu hỏi? Tôi cảm thấy rằng bất kỳ phương pháp nào liên quan đến việc tiêm gián điệp của Hoạt động sẽ luôn có một số trường hợp cạnh mà nó sẽ không hoạt động. – jdonmoyer