Unit-Tests und instrumentierte Tests | Teil 1

Jan 25 2023
Zwei Arten von Unit-Tests Unit-Tests sind eine Methode zum isolierten Testen einzelner Codeeinheiten. Dabei handelt es sich um eine Softwaretestmethode, bei der die kleinsten testbaren Teile einer Anwendung, sogenannte Einheiten, einzeln und unabhängig auf ordnungsgemäße Funktion getestet werden. Mit dieser Art von Tests wird überprüft, ob die einzelnen Codeeinheiten wie Methoden und Funktionen wie vorgesehen funktionieren.

Zwei Arten von Unit-Tests

  • JVM-Test (Lokaler Unit-Test)
  • Test auf dem Gerät (Instrumentierungstest)
  • → UI-Test (Interaktion mit Ansichten)
  • → Nicht-UI-Test (Content, Assets Manager usw.)

Bei Unit-Tests handelt es sich um eine Methode zum isolierten Testen einzelner Codeeinheiten. Dabei handelt es sich um eine Software-Testmethode, bei der die kleinsten testbaren Teile einer Anwendung, sogenannte Units, einzeln und unabhängig auf ordnungsgemäße Funktion getestet werden. Mit dieser Art von Tests wird überprüft, ob die einzelnen Codeeinheiten wie Methoden und Funktionen wie vorgesehen funktionieren. Unit-Tests sind in der Regel automatisiert und werden als Teil des Build-Prozesses ausgeführt. Sie sind schnell, einfach zu schreiben und können häufig ausgeführt werden, wodurch schnelles Feedback zur Qualität des Codes gegeben wird.

In Android wird das Framework für Unit-Tests von JUnit bereitgestellt, einem weit verbreiteten Test-Framework für Java. JUnit ist im Android SDK enthalten und kann daher problemlos zu jedem Android-Projekt hinzugefügt werden.

Hier ist ein Beispiel für einen einfachen Unit-Test in Android mit JUnit:

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

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

Ein weiteres Beispiel: Sie können eine Funktion testen, die einen Parameter erwartet und einen Wert zurückgibt:

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

Zusammenfassend handelt es sich beim Unit-Test um eine Software-Testmethode, bei der die kleinsten testbaren Teile einer Anwendung, sogenannte Units, einzeln und unabhängig auf ordnungsgemäße Funktion getestet werden. In Android wird das Framework für Unit-Tests von JUnit bereitgestellt, einem weit verbreiteten Test-Framework für Java. JUnit ist im Android SDK enthalten und kann daher problemlos zu jedem Android-Projekt hinzugefügt werden. Es ist ein wesentlicher Bestandteil jedes Android-App-Entwicklungsprozesses, trägt dazu bei, sicherzustellen, dass der Code korrekt funktioniert, und erleichtert das Erkennen und Erfassen Beheben Sie Fehler frühzeitig im Entwicklungsprozess.

Vorteile von Unit-Tests:

  • Unit-Tests erhöhen das Vertrauen in die Änderung/Pflege von Code. Wenn gute Unit-Tests geschrieben werden und diese bei jeder Codeänderung ausgeführt werden, können wir alle durch die Änderung entstandenen Fehler umgehend erkennen. Wenn Codes bereits weniger voneinander abhängig sind, um Unit-Tests zu ermöglichen, sind außerdem die unbeabsichtigten Auswirkungen von Änderungen an Code geringer.
  • Codes sind wiederverwendbar. Um Unit-Tests zu ermöglichen, müssen Codes modular sein. Dies bedeutet, dass Codes einfacher wiederverwendet werden können.
  • Durch die Reduzierung der Fehler, die bei Systemtests oder Abnahmetests auftreten können, wird die Entwicklung beschleunigt.
  • Das Debuggen ist einfach. Wenn ein Test fehlschlägt, müssen nur die neuesten Änderungen debuggt werden. Bei Tests auf höheren Ebenen müssen Änderungen, die über mehrere Tage/Wochen/Monate hinweg vorgenommen wurden, gescannt werden.
  • Codes sind zuverlässiger.

@Test

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

Wie Sie sehen können, ist val sample = sample() Arrange

und val result = sample.isPallindrome(“hello”) ist Act

und „assertEquals(false,result)“ ist das Assert

Hier ist „false“ der erwartete Wert und „result“ der Wert, den wir durch die Funktion erhalten. Danach stimmt es mit diesen Werten überein, je nachdem, welches Ergebnis der Testfall besteht oder nicht

All diese drei Dinge machen das Testen zur Logik

Ich werde einen String testen, bei dem ich überprüfe, ob ein String ein Palindrom ist oder nicht

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

Klicken Sie auf diese Schaltfläche und wählen Sie die Option zum Ausführen des Beispieltestfalls. Wenn Sie nur einen einzelnen Testfall ausführen möchten, müssen Sie vor diesem Funktionsblock auf die Schaltfläche „Ausführen“ klicken. Wenn Sie alle Testfälle ausführen möchten, klicken Sie vor der Klasse auf die Schaltfläche „Ausführen“.

Wie Sie sehen können, wurden alle Testfälle gemäß dem erwarteten Wert bestanden

Im nächsten Artikel werden wir instrumentierte Tests sehen. Weitere Informationen zu Unit-Tests finden Sie in diesem Dokument

Über mich

Hallo,

Ich bin Abhay Saini und arbeite als Android-Entwickler bei AppyHigh. Ich bin ein Student im vorletzten Studienjahr am Indian Institute of Information Technology, Una . Ein begeisterter Studienanfänger mit hochmotivierter, schneller Lernfähigkeit und Führungsqualitäten, der einen B.Tech in Informationstechnologie anstrebt.

Wenn Sie ein Problem mit Android haben, rufen Sie mich einfach an [email protected] oder Linkedin

Einen schönen Tag noch!!