Introducción al desarrollo de Android UT

I. Descripción general

        El desarrollo de Android UT (Unit Testing) se refiere al proceso de desarrollo de pruebas unitarias en aplicaciones de Android. La prueba unitaria es un método de prueba de software que se utiliza para probar la exactitud de la unidad comprobable más pequeña (generalmente una función o método) en una aplicación.

El objetivo principal del desarrollo de Android UT es garantizar que las distintas unidades de la aplicación funcionen correctamente y como se espera en diferentes circunstancias. Al escribir, ejecutar y mantener pruebas unitarias, los desarrolladores pueden identificar y resolver problemas potenciales de manera temprana, mejorando la calidad y confiabilidad del código.

Los siguientes son los pasos generales para el desarrollo de Android UT:

  • Determine el objetivo de las pruebas unitarias: seleccione la unidad específica (función, método, etc.) que se va a probar y comprenda su comportamiento, entradas y salidas esperados.
  • Cree casos de prueba: escriba casos de prueba que incluyan datos de prueba y resultados esperados para diferentes entradas y situaciones.
  • Integre marcos de prueba: elija marcos de prueba adecuados (como JUnit, Mockito, etc.) e intégrelos en aplicaciones de Android.
  • Escribir código de prueba: utilice el marco de prueba seleccionado para escribir código de prueba que llame a la unidad bajo prueba y afirme que los resultados esperados son consistentes con los resultados reales.
  • Ejecute pruebas: ejecute el código de prueba en el entorno de desarrollo y asegúrese de que los resultados de la prueba sean los esperados.
  • Analizar resultados: analice la cobertura y los resultados de ejecución del código de prueba para encontrar posibles problemas y errores potenciales.
  • Solucione el problema: si una prueba encuentra un problema o error, el desarrollador debe corregir el código asociado y volver a ejecutar la prueba para asegurarse de que el problema se resuelva.
  • Integración continua: integre las pruebas unitarias con el proceso de integración continua para garantizar que se ejecuten pruebas unitarias relevantes para cada cambio de código.

        A través del desarrollo sistemático de pruebas unitarias, puede mejorar la solidez, el mantenimiento y la capacidad de prueba de su código y reducir el riesgo de introducir nuevos errores. Al mismo tiempo, también puede ayudar a los desarrolladores a comprender y dominar mejor el comportamiento y la lógica del código.

2. Ejemplo sencillo

1. Introducción a JUnit

        JUnit es un marco de código abierto para escribir y ejecutar pruebas unitarias. Es uno de los marcos de pruebas unitarias más populares en el desarrollo de Java y se utiliza para probar varios componentes, métodos y funciones de aplicaciones Java.

Las principales características y ventajas de JUnit son las siguientes:

Fácil de usar : JUnit proporciona un conjunto de API conciso e intuitivo que son fáciles de aprender y usar. Utiliza anotaciones y afirmaciones para escribir código de prueba, lo que hace que escribir y ejecutar pruebas unitarias sea simple y directo.

Pruebas automatizadas : JUnit admite pruebas automatizadas, lo que significa que puede escribir una prueba una vez y luego ejecutarla repetidamente para garantizar que el código permanezca correcto durante todo el proceso de desarrollo. Esto ahorra mucho tiempo y esfuerzo en las pruebas manuales.

Desarrollo basado en pruebas : JUnit fomenta la práctica del desarrollo basado en pruebas (TDD). Al escribir pruebas primero y luego escribir código que las pase, JUnit puede ayudar a los desarrolladores a definir mejor el comportamiento y la funcionalidad esperados de su código y garantizar que el código se ejecute correctamente de acuerdo con esos requisitos.

Aserción y verificación : JUnit proporciona una gran cantidad de métodos de aserción y verificación para verificar si los resultados de salida y el comportamiento del código son los esperados. Esto garantiza que la lógica de su código sea correcta y detecte posibles errores.

Conjuntos de pruebas y extensibilidad : JUnit admite la creación de conjuntos de pruebas, que pueden combinar varias clases de prueba para ejecutarse juntas. Al mismo tiempo, JUnit también admite extensiones y se pueden utilizar puntos de extensión personalizados para mejorar la funcionalidad del marco de prueba.

Integración continua : JUnit se integra perfectamente con herramientas de integración continua (como Jenkins) para integrar fácilmente las pruebas unitarias con el proceso de compilación y la canalización de implementación de código, mejorando así la eficiencia del desarrollo y la calidad del código del equipo de desarrollo.

        En general, JUnit es una herramienta poderosa y flexible que se utiliza para ayudar a los desarrolladores a escribir pruebas unitarias confiables, fáciles de mantener y de alta calidad. El uso de JUnit puede mejorar la capacidad de prueba y la estabilidad del código, reducir errores potenciales y brindar a los desarrolladores retroalimentación rápida y confianza en su código.

2. Cómo utilizar JUnit

        Cuando se utiliza JUnit para pruebas unitarias, se pueden escribir múltiples métodos de prueba para cubrir diferentes funcionalidades y escenarios. Aquí hay algunos otros ejemplos de JUnit:

import org.junit.Assert;
import org.junit.Test;

public class ExampleTest {
    
    @Test
    public void testAssertEquals() {
        int expected = 5;
        int actual = 2 + 3;
        Assert.assertEquals(expected, actual);
    }
    
    @Test
    public void testAssertTrue() {
        boolean condition = true;
        Assert.assertTrue(condition);
    }
    
    @Test
    public void testAssertFalse() {
        boolean condition = false;
        Assert.assertFalse(condition);
    }
    
    @Test
    public void testAssertNull() {
        Object object = null;
        Assert.assertNull(object);
    }
    
    @Test
    public void testAssertNotNull() {
        Object object = new Object();
        Assert.assertNotNull(object);
    }
    
    @Test(expected = ArithmeticException.class)
    public void testException() {
        int result = 5 / 0;
    }
}

        En este ejemplo, mostramos el uso de algunos métodos de aserción y anotaciones comunes de JUnit:

  • Assert.assertEquals(expected, actual): Verifique que dos valores sean iguales.
  • Assert.assertTrue(condition): Verifique si la condición dada es verdadera.
  • Assert.assertFalse(condition): Verifique si la condición dada es falsa.
  • Assert.assertNull(object): Verifique si el objeto dado es nulo.
  • Assert.assertNotNull(object): Verifique que el objeto dado no sea nulo.
  • @TestAnotación: se utiliza para marcar un método de prueba. JUnit buscará automáticamente @Testmétodos marcados con anotaciones y los ejecutará.
  • @Test(expected = Exception.class): Verifique que el método de prueba arroje la excepción esperada.

        Al escribir métodos de prueba como el ejemplo anterior, puede escribir más pruebas unitarias para probar diferentes características y situaciones. Estas pruebas unitarias lo ayudan a garantizar que el comportamiento y la lógica esperados de sus métodos sean correctos y brindan una manera confiable y rápida de verificar su aplicación durante el desarrollo.

3. Ejemplo sencillo de JUnit

        Supongamos que tenemos una Calculatorclase llamada que tiene un método estático add()que suma dos números y devuelve el resultado.

public class Calculator {
    public static int add(int a, int b) {
        return a + b;
    }
}

        Usaremos el marco JUnit para las pruebas unitarias. build.gradlePrimero, asegúrese de que la dependencia JUnit esté introducida en el archivo del proyecto :

dependencies {
    // 其他依赖...
    testImplementation 'junit:junit:4.13.2'
}

        Luego creamos una CalculatorTestclase de prueba llamada que marca el método de prueba con anotaciones JUnit y usa afirmaciones para verificar los resultados esperados.

import org.junit.Assert;
import org.junit.Test;

public class CalculatorTest {
    @Test
    public void testAdd() {
        int result = Calculator.add(2, 3);
        Assert.assertEquals(5, result);
    }
}

        En el ejemplo anterior, usamos @Testla anotación para marcar un método de prueba testAdd()que llama  Calculatoral add()método de la clase y usamos Assert.assertEquals()aserciones para verificar que los resultados sean los esperados.

        Ahora puede ejecutar esta clase de prueba en el ejecutor de pruebas de Android Studio. Haga clic derecho en CalculatorTestla clase y seleccione "Ejecutar 'CalculatorTest'", o haga clic en el botón Ejecutar y se ejecutará la prueba unitaria. Si todo va bien, deberías ver el mensaje de prueba aprobada.

4. Otras escenas

        JUnit puede manejar una variedad de escenarios de prueba complejos. Los escenarios reales de pruebas unitarias y la complejidad variarán. Pero al utilizar el marco JUnit y las técnicas de prueba adecuadas, puede escribir más pruebas unitarias con una cobertura integral para garantizar la corrección de cada módulo de la aplicación.

Pruebas paramétricas

        A veces necesitamos realizar varias pruebas en el mismo método de prueba utilizando diferentes parámetros. JUnit admite pruebas parametrizadas a través de @ParameterizedTestanotaciones y anotaciones relacionadas con pruebas parametrizadas.@ValueSource

@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
public void testSomeMethod(int value) {
    // 使用不同的参数执行测试
    // ...
}

Preparación y limpieza antes y después de las pruebas.

        A veces necesitamos realizar algunos trabajos de preparación y limpieza antes y después de ejecutar la prueba, como inicializar una conexión de base de datos o liberar recursos. JUnit proporciona @BeforeEachanotaciones @AfterEachpara marcar los bloques de código que deben ejecutarse antes y después de ejecutar cada método de prueba.

@BeforeEach
public void setUp() {
    // 执行测试前的准备工作
}

@AfterEach
public void tearDown() {
    // 执行测试后的清理工作
}

prueba de tiempo de espera

        A veces necesitamos establecer el tiempo máximo de ejecución de un determinado método de prueba y marcar la prueba como fallida después del tiempo de espera. JUnit @Timeout admite pruebas de tiempo de espera mediante anotaciones.

@Test
@Timeout(value = 1000, unit = TimeUnit.MILLISECONDS)
public void testSomeMethod() {
    // 在1秒内执行测试,否则标记为失败
    // ...
}

Pruebas de excepción

        A veces necesitamos verificar si un método arroja la excepción esperada. JUnit puede usar propiedades @Testanotadas para marcar los tipos de excepción esperados.expected

@Test(expected = ArithmeticException.class)
public void testDivisionByZero() {
    int result = 5 / 0;
}

Control de secuencia de prueba

        A veces necesitamos ejecutar métodos de prueba en un orden específico, como determinar el orden de ejecución de ciertos métodos de prueba o crear escenarios de prueba que dependen de los resultados de otras pruebas. JUnit 5 proporciona @TestMethodOrderanotaciones y @Orderanotaciones para controlar el orden de ejecución de los métodos de prueba.

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TestOrderExample {

    @Test
    @Order(1)
    public void testMethod1() {
        // 第一个测试方法
    }

    @Test
    @Order(2)
    public void testMethod2() {
        // 第二个测试方法
    }
}

        Los anteriores son solo algunos ejemplos de los escenarios complejos de JUnit. JUnit también proporciona más funciones y puntos de extensión, como análisis de parámetros, pruebas condicionales, pruebas anidadas, etc., para adaptarse a diferentes necesidades de prueba. Ya sea que se trate de una prueba básica simple o un escenario de prueba complejo, JUnit puede brindar un soporte poderoso y flexible para ayudar a los desarrolladores a escribir pruebas unitarias integrales y confiables.

Supongo que te gusta

Origin blog.csdn.net/c19344881x/article/details/132851228
Recomendado
Clasificación