tarjeta puede pro pareja para otro online intervenir hackear gratis espiar espia credito como celular aplicaciones aplicacion android mockito

android - puede - whatsapp espia chat



Cómo espiar correctamente una actividad (2)

Utilizando:

Android Test Support Library SingleActivityFactory , ActivityTestRule y Mockito''s spy()

dependencies { androidTestImplementation ''com.android.support.test:runner:1.0.2'' androidTestImplementation ''com.android.support.test:rules:1.0.2'' androidTestImplementation ''org.mockito:mockito-android:2.21.0'' }

Contorno:

inyectar la instancia espiada dentro de la implementación de SingleActivityFactory

Código:

public class MainActivityTest { MainActivity subject; SingleActivityFactory<MainActivity> activityFactory = new SingleActivityFactory<MainActivity>(MainActivity.class) { @Override protected MainActivity create(Intent intent) { subject = spy(getActivityClassToIntercept()); return subject; } }; @Rule public ActivityTestRule<MainActivity> testRule = new ActivityTestRule<>(activityFactory, true, true); @Test public void activity_isBeingSpied() { verify(subject).setContentView(R.layout.activity_main); } }

Mockito crea una instancia de proxy cuando algo se espía. Ahora, ¿hay alguna forma de reenviar los configuradores que luego se ejecutan en esa instancia de proxy a la instancia real que se encuentra detrás de ella?

Justificación: Tengo una instancia de objeto que no tengo completamente bajo mi control, es decir, una actividad de Android. Puedo dar a la mayoría de las partes de mi aplicación la versión con proxy y funciona bien como está, pero debido a que necesito crear el espía / proxy muy temprano durante la fase de creación de la actividad, aún no está completamente instanciado, por ejemplo, el contexto base es no adjunto Esto sucede en la instancia de proxy y, por supuesto, no la utiliza la instancia de la actividad en sí misma (que se refiere a sí misma a través de Activity.this ). El resultado final es que esto conduce a todo tipo de bloqueos porque la resolución de recursos se realiza a través de este contexto base, por lo que la maquinaria interna de Fragmentos produce NPE y más.

Aquí hay un código:

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; } }

No tengo ni idea, ¿alguna idea?


Puedes usar Robolectric para crear tu propio proxy (o como Robolectric los llama "Sombras") para tu actividad,

Cuando crea el proxy, puede crear sus propios configuradores que pueden activar los métodos de objetos reales,

Cómo crear un ejemplo de sombra:

@Implements(Bitmap.class) public class MyShadowBitmap { @RealObject private Bitmap realBitmap; private int bitmapQuality = -1; @Implementation public boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream) { bitmapQuality = quality; return realBitmap.compress(format, quality, stream); } public int getQuality() { return bitmapQuality; } } }

cuando el @RealObject es tu instancia real,

Para usar esta sombra utilizando el corredor de pruebas Robolectric, defina una nueva clase de prueba de la siguiente manera:

@RunWith(RobolectricTestRunner.class) @Config(shadows = MyShadowBitmap.class) public class MyTestClass {}

Para tirar de la instancia de sombra actual use el método:

shadowOf()

Y en cualquier caso, aquí hay un enlace a Robolectric:

http://robolectric.org/custom-shadows/