Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Escriba una prueba impulsada por el anfitrión en la Federación de comercio

Esta página describe cómo escribir una prueba de dispositivo estilo JUnit4 impulsada por el host. Esto significa que el lado del host del arnés va a desencadenar acciones contra el dispositivo.

Tenga en cuenta que consideramos que las pruebas "del lado del host" y las pruebas "impulsadas por el host" son ligeramente diferentes:

  • Prueba impulsada por el host: es una prueba que se ejecuta en el host que interactúa con uno o más dispositivos. El sistema bajo prueba (SUT) no está en el propio host, sino que se está probando desde el host.
  • prueba del lado del host: es una prueba que se ejecuta puramente en el host y prueba algo solo en el host, por ejemplo, pruebas unitarias.

¿Por qué crear una prueba impulsada por el host en lugar de una prueba de instrumentación?

Algunas pruebas pueden requerir que afecte el estado general del dispositivo, como emitir un comando de reinicio. En el caso de prueba de instrumentación, un reinicio mataría la instrumentación, la prueba no podría continuar y no habría resultados disponibles.

Las pruebas impulsadas por el host también pueden impulsar pasos de configuración adicionales que requieren interacción con dispositivos externos de los que depende la prueba.

Una prueba impulsada por el host puede manejar estos casos de uso y permitir pruebas avanzadas del dispositivo con más escenarios. Si se encuentra en esa situación, escribir una prueba basada en host tiene más sentido.

¿Cómo se escriben las pruebas impulsadas por el host en TF?

He aquí una muestra:

@RunWith(DeviceJUnit4ClassRunner.class)
public class SampleHostJUnit4DeviceTest extends BaseHostJUnit4Test {
    @Before
    public void setUp() throws Exception {
       // Some setup
    }

    @Test
    public void testCheckWeHaveDevice() throws Exception {
        Assert.assertNotNull(getDevice());
    }
}

Pruebas de acogida impulsado en Federación de Comercio son impulsados por el DeviceJUnit4ClassRunner corredor de prueba junit4. La estructura general de la clase de prueba es la misma que la de una prueba JUnit4 normal:

  • @BeforeClass
  • @Before
  • @Test
  • @After
  • @AfterClass
  • Assume , Assert

Extendiendo BaseHostJunit4Test es una manera de heredar útil API utilidades de prueba, tales como:

  • installPackage : Permite instalar un APK en el dispositivo de destino.
  • installPackageAsUser : Permite instalar un APK como usuario en el dispositivo de destino.
  • uninstallPackage : Permite desinstalar un APK.
  • isPackageInstalled : Comprobar si un paquete está instalado o no.
  • hasDeviceFeature : Comprobar si el dispositivo es compatible con una característica o no. ( pm list features )
  • runDeviceTests(DeviceTestRunOptions options) : ejecuta una prueba de instrumentación contra un dispositivo de destino utilizando DeviceTestRunOptions para manejar todas las opciones posibles.

También proporcione acceso al objeto de dispositivo Tradefed:

  • getDevice() : Devuelve un objeto de dispositivo TF para manipular el dispositivo.
  • getBuild() : Devuelve una información composición de objetos TF para obtener información acerca de la construcción.
  • getAbi() : Devuelve el ABI se ejecuta la prueba en contra.

Soporte comercial: preparación y limpieza de dispositivos por clase

Junit4 @BeforeClass y @AfterClass sólo son aplicables a los métodos estáticos, lo que hace que sea imposible utilizar el #getDevice() manejador de hacer un poco de dispositivo específico, de una sola vez, por la configuración de clase o limpiar. Para resolver este problema, utilice la anotación Tradefed.

  • @BeforeClassWithInfo: se ejecuta antes de las anotaciones @BeforeClass
  • @AfterClassWithInfo: se ejecuta después de las anotaciones @AfterClass
   @BeforeClassWithInfo
   public static void beforeClassWithDevice(TestInformation testInfo) {
       assertNotNull(testInfo.getDevice());
       testInfo.properties().put("mytest:test-prop", "test");
   }

   @AfterClassWithInfo
   public static void afterClassWithDevice(TestInformation testInfo) {
       assertNotNull(testInfo.getDevice());
       testInfo.properties().put("mytest:test-prop", "test");
   }

TestInformation le permite utilizar las propiedades del dispositivo y almacenar las imágenes que se pueden utilizar ya sea en el ámbito estático o no estático. BaseHostJUnit4Test soportes conseguir el TestInformation en un ámbito no estático a través de #getTestInformation() .

Si no está extendiendo BaseHostJUnit4Test , puede implementar ITestInformationReceiver con el fin de recibir el TestInformation objeto.

¿Cómo configurar una prueba impulsada por host en Tradefed?

En el archivo de configuración XML Tradefed, pruebas de acogida impulsado se ejecutan a través de la HostTest corredor.

<test class="com.android.tradefed.testtype.HostTest" >
    <option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>