Bir şey gizlendiğinde, Mockito bir proxy örneği oluşturur. Şimdi, o proxy örneğinde çalıştırılan ayarlayıcıları arkasındaki gerçek örneğe iletmenin herhangi bir yolu var mı?Bir etkinlik için uygun şekilde nasıl casusluk yapılır
Rasyonel: Tamamen denetimimin altında, yani bir Android etkinliğimde bulunmayan bir nesne örneğim var. Uygulamamın çoğunu proxy sürümüne verebilirim ve ama gibi iyi çalışır, çünkü aktivitenin oluşturma aşamasında çok erken casus/proxy oluşturmam gerekir, henüz tam olarak örneklenmemiş, ör. Temel içerik eklenmedi. Bu proxy örneğinde olur ve elbette etkinlik örneği tarafından kullanılmaz (Activity.this
aracılığıyla kendisine atıfta bulunur). Sonuç olarak, bu durum her türlü çökmeye yol açmaktadır, çünkü kaynak çözümlemesi bu temel bağlamda gerçekleşmektedir, böylece dahili Parçalama makinesi NPE'leri ve daha fazlasını atar. - herhangi bir fikir
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;
}
}
Ben clueless değilim: Burada
bazı kodudur? ,
Neden espresso kullanmayın: https://google.github.io/android-testing-support-library/docs/espresso/ da aktivitesini kontrol edebilirsiniz Yani. –
Espresso'yu kullanıyorum, bunun sorumu ile ilgisi yok. –
, soru dışındaki etkinliğinize @VisibleForTesting setDelegate() yöntemi ekliyor mu? Faaliyetin casuslarını enjekte etmeyi içeren herhangi bir yaklaşımın, her zaman işe yaramayacağı bazı durumlara sahip olacağını hissediyorum. – jdonmoyer