Introducció

Les proves són una part essencial del desenvolupament de programari, ja que asseguren que el codi funcioni correctament i que els canvis futurs no introdueixin errors. En aquest tema, aprendrem sobre les proves unitàries i les proves de la interfície d'usuari (UI) en el context del desenvolupament d'aplicacions Android.

Objectius

  • Comprendre la importància de les proves unitàries i les proves de la UI.
  • Aprendre a configurar i escriure proves unitàries en Android.
  • Aprendre a configurar i escriure proves de la UI en Android.
  • Conèixer les eines i biblioteques més utilitzades per a les proves en Android.

Contingut

  1. Proves Unitàries

1.1. Què són les Proves Unitàries?

Les proves unitàries són proves automàtiques que verifiquen el funcionament d'unitats individuals de codi, com ara funcions o mètodes. Aquestes proves ajuden a assegurar que cada part del codi funcioni correctament de manera aïllada.

1.2. Configuració de les Proves Unitàries en Android Studio

Per configurar les proves unitàries en Android Studio, segueix aquests passos:

  1. Afegir Dependències de Test: Afegeix les següents dependències al fitxer build.gradle del mòdul de l'aplicació:

    dependencies {
        testImplementation 'junit:junit:4.13.2'
        testImplementation 'org.mockito:mockito-core:3.11.2'
    }
    
  2. Crear una Classe de Test: Crea una nova classe de test dins del directori src/test/java.

    public class ExampleUnitTest {
        @Test
        public void addition_isCorrect() {
            assertEquals(4, 2 + 2);
        }
    }
    

1.3. Escriure Proves Unitàries

A continuació, es mostra un exemple de prova unitària per a una funció que suma dos nombres:

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

public class CalculatorTest {
    private Calculator calculator;

    @Before
    public void setUp() {
        calculator = new Calculator();
    }

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

  1. Proves de la Interfície d'Usuari (UI)

2.1. Què són les Proves de la UI?

Les proves de la UI són proves automàtiques que verifiquen el funcionament de la interfície d'usuari de l'aplicació. Aquestes proves asseguren que els elements de la UI es comportin correctament i que les interaccions de l'usuari produeixin els resultats esperats.

2.2. Configuració de les Proves de la UI en Android Studio

Per configurar les proves de la UI en Android Studio, segueix aquests passos:

  1. Afegir Dependències de Test: Afegeix les següents dependències al fitxer build.gradle del mòdul de l'aplicació:

    dependencies {
        androidTestImplementation 'androidx.test.ext:junit:1.1.3'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    }
    
  2. Crear una Classe de Test de la UI: Crea una nova classe de test dins del directori src/androidTest/java.

    @RunWith(AndroidJUnit4.class)
    public class ExampleInstrumentedTest {
        @Test
        public void useAppContext() {
            // Context of the app under test.
            Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
            assertEquals("com.example.myapp", appContext.getPackageName());
        }
    }
    

2.3. Escriure Proves de la UI amb Espresso

Espresso és una biblioteca popular per a les proves de la UI en Android. A continuació, es mostra un exemple de prova de la UI que verifica que un TextView mostra el text correcte després de fer clic en un botó:

@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

    @Rule
    public ActivityScenarioRule<MainActivity> activityRule =
            new ActivityScenarioRule<>(MainActivity.class);

    @Test
    public void testButtonClick() {
        // Fer clic en el botó
        onView(withId(R.id.button)).perform(click());

        // Verificar que el TextView mostra el text correcte
        onView(withId(R.id.textView)).check(matches(withText("Hello, World!")));
    }
}

  1. Eines i Biblioteques per a les Proves en Android

  • JUnit: Una biblioteca per a les proves unitàries.
  • Mockito: Una biblioteca per a la creació de mocks en les proves unitàries.
  • Espresso: Una biblioteca per a les proves de la UI.
  • Robolectric: Una biblioteca per a les proves unitàries que permet executar proves en un entorn JVM en lloc d'un dispositiu o emulador.

Exercicis Pràctics

Exercici 1: Escriure una Prova Unitària

  1. Crea una classe MathUtils amb un mètode multiply(int a, int b) que multipliqui dos nombres.
  2. Escriu una prova unitària per al mètode multiply que verifiqui que el resultat és correcte.

Solució

public class MathUtils {
    public int multiply(int a, int b) {
        return a * b;
    }
}

public class MathUtilsTest {
    private MathUtils mathUtils;

    @Before
    public void setUp() {
        mathUtils = new MathUtils();
    }

    @Test
    public void testMultiply() {
        int result = mathUtils.multiply(3, 4);
        assertEquals(12, result);
    }
}

Exercici 2: Escriure una Prova de la UI

  1. Crea una activitat amb un EditText i un TextView.
  2. Escriu una prova de la UI que verifiqui que el TextView mostra el text introduït en l'EditText després de fer clic en un botó.

Solució

// MainActivity.java
public class MainActivity extends AppCompatActivity {
    private EditText editText;
    private TextView textView;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);
        textView = findViewById(R.id.textView);
        button = findViewById(R.id.button);

        button.setOnClickListener(v -> {
            String text = editText.getText().toString();
            textView.setText(text);
        });
    }
}

// MainActivityTest.java
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

    @Rule
    public ActivityScenarioRule<MainActivity> activityRule =
            new ActivityScenarioRule<>(MainActivity.class);

    @Test
    public void testEditTextAndButton() {
        // Introduir text en l'EditText
        onView(withId(R.id.editText)).perform(typeText("Test Text"));

        // Fer clic en el botó
        onView(withId(R.id.button)).perform(click());

        // Verificar que el TextView mostra el text introduït
        onView(withId(R.id.textView)).check(matches(withText("Test Text")));
    }
}

Conclusió

En aquest tema, hem après sobre la importància de les proves unitàries i les proves de la UI en el desenvolupament d'aplicacions Android. Hem vist com configurar i escriure proves unitàries amb JUnit i Mockito, així com proves de la UI amb Espresso. A més, hem practicat aquests conceptes amb exercicis pràctics. Les proves són una part crucial del desenvolupament de programari, ja que ajuden a assegurar la qualitat i la fiabilitat del codi.

© Copyright 2024. Tots els drets reservats