Test unitari e test strumentati | Parte 1

Jan 25 2023
Due tipi di test unitario Il test unitario è un metodo per testare singole unità di codice in isolamento, è un metodo di test del software in cui le parti testabili più piccole di un'applicazione, chiamate unità, vengono testate individualmente e indipendentemente per il corretto funzionamento. Questo tipo di test viene utilizzato per verificare che le singole unità di codice, come metodi e funzioni, funzionino come previsto.

Due tipi di unit test

  • Test JVM (test dell'unità locale)
  • Test sul dispositivo (test della strumentazione)
  • → Test dell'interfaccia utente (interazione con le viste)
  • → Test non UI (Contenuto, Asset Manager, ecc

Il test unitario è un metodo per testare singole unità di codice in isolamento, è un metodo di test del software in cui le parti testabili più piccole di un'applicazione, chiamate unità, vengono testate individualmente e indipendentemente per il corretto funzionamento. Questo tipo di test viene utilizzato per verificare che le singole unità di codice, come metodi e funzioni, funzionino come previsto. I test unitari sono in genere automatizzati e vengono eseguiti come parte del processo di compilazione. Sono veloci, facili da scrivere e possono essere eseguiti frequentemente, fornendo un rapido feedback sulla qualità del codice.

In Android, il framework per i test unitari è fornito da JUnit, un framework di test ampiamente utilizzato per Java. JUnit è incluso in Android SDK, quindi può essere facilmente aggiunto a qualsiasi progetto Android.

Ecco un esempio di un semplice unit test in Android utilizzando JUnit:

import org.junit.Test
import org.junit.Assert.*

class ExampleUnitTest {
    @Test
    fun addition_isCorrect() {
        assertEquals(4, 2 + 2)
    }
}

Un altro esempio, puoi testare una funzione che si aspetta un parametro e restituisce un valore:

class Calculator {
    fun add(a: Int, b: Int): Int = a + b
}

class CalculatorTest {
    private val calculator = Calculator()

    @Test
    fun add_isCorrect() {
        assertEquals(4, calculator.add(2, 2))
    }
}

In sintesi, il test unitario è un metodo di test del software in cui le parti testabili più piccole di un'applicazione, chiamate unità, vengono testate individualmente e indipendentemente per il corretto funzionamento. In Android, il framework per i test unitari è fornito da JUnit, un framework di test ampiamente utilizzato per Java. JUnit è incluso in Android SDK, quindi può essere facilmente aggiunto a qualsiasi progetto Android, è una parte essenziale di qualsiasi processo di sviluppo di app Android, aiuta a garantire che il codice funzioni correttamente e rende più facile catturare e correggere i bug all'inizio del processo di sviluppo.

Vantaggi del test unitario:

  • Il test unitario aumenta la fiducia nel modificare/mantenere il codice. Se vengono scritti buoni unit test e se vengono eseguiti ogni volta che viene modificato qualsiasi codice, saremo in grado di rilevare tempestivamente eventuali difetti introdotti a causa della modifica. Inoltre, se i codici sono già resi meno interdipendenti per rendere possibile il test unitario, l'impatto involontario delle modifiche a qualsiasi codice è minore.
  • I codici sono più riutilizzabili. Per rendere possibile il test unitario, i codici devono essere modulari. Ciò significa che i codici sono più facili da riutilizzare.
  • Lo sviluppo è più veloce riducendo i difetti che possono essere riscontrati durante il test del sistema o il test di accettazione.
  • Il debug è facile. Quando un test fallisce, è necessario eseguire il debug solo delle modifiche più recenti. Con i test a livelli più elevati, è necessario scansionare le modifiche apportate nell'arco di diversi giorni/settimane/mesi.
  • I codici sono più affidabili.

@Test

fun pallindrome{
    //Arrange
    //Act
    //Assert
}

Come puoi vedere val sample = sample() è Arrange

e val result = sample.isPallindrome(“hello”) is Act

e assertEquals(false,result) questo è Assert

qui false è il valore atteso e result è il valore che stiamo ottenendo attraverso la funzione dopodiché corrisponderà a questi valori in base al risultato che il test case passerà o fallirà

tutte queste tre cose fanno la logica del test

Proverò su una stringa in cui verificherò che una stringa sia palindromo o meno

package com.example.unittesting.utils

import org.junit.Assert.*

import org.junit.Test

class sampleTest {

    @Test
    fun isPallindrome() {
        //Arrange
        val sample = sample()
        //Act
        val result = sample.isPallindrome("hello")
        //Assert
        assertEquals(false,result)
    }

    @Test
    fun isPallindrome_level_expectedTrue() {
        //Arrange
        val sample = sample()
        //Act
        val result = sample.isPallindrome("level")
        //Assert
        assertEquals(true,result)
    }

    @Test
    fun isPallindrome_civic_expectedTrue() {
        //Arrange
        val sample = sample()
        //Act
        val result = sample.isPallindrome("civic")
        //Assert
        assertEquals(true,result)
    }
}

Fare clic su quel pulsante e scegliere l'opzione per eseguire il caso di test di esempio. se vuoi eseguire solo un singolo caso di test, devi fare clic sul pulsante Esegui davanti a quel blocco funzione altrimenti se vuoi eseguire tutti i casi di test, fai clic sul pulsante Esegui davanti a Classe

Come puoi vedere, tutti i casi di test sono stati superati secondo il valore previsto

Nel prossimo articolo vedremo i test strumentati per ulteriori informazioni sui test unitari passare attraverso questi documenti

Su di me

CIAO,

Sono Abhay Saini, lavoro come sviluppatore Android presso AppyHigh. Sono uno studente dell'ultimo anno presso l' Indian Institute of Information Technology, Una . Un entusiasta più fresco con capacità di apprendimento altamente motivato, veloce e di leadership che persegue B.Tech in Information Technology.

Se hai qualche problema con Android, inviami un ping su [email protected] o Linkedin

Buona giornata!!