Sobes.tech
Middle

Ποια μεθόδους δοκιμής χρησιμοποιείτε για να δοκιμάσετε τον κώδικα σε Kotlin;

sobes.tech AI

Απάντηση από AI

Εφαρμόζω τις ακόλουθες μεθόδους δοκιμής:

  • Μονάδα δοκιμής: Έλεγχος μικρών μεμονωμένων συστατικών (συναρτήσεων, κλάσεων) σε απομόνωση. Χρησιμοποιώ JUnit 5 ή Spek.
  • Ολοκληρωμένη δοκιμή: Έλεγχος της αλληλεπίδρασης μεταξύ πολλαπλών συστατικών ή υποσυστημάτων.
  • Δοκιμή UI: Δοκιμή της διεπαφής χρήστη σε πραγματική συσκευή ή εξομοιωτή. Για Android, χρησιμοποιώ Espresso ή UI Automator.
  • Εργαλειοθήκη δοκιμής: Δοκιμή που απαιτεί εκτέλεση σε συσκευή ή εξομοιωτή. Περιλαμβάνει δοκιμές UI και ορισμένους τύπους ολοκληρωμένων δοκιμών.
  • End-to-End δοκιμή: Δοκιμή ολόκληρης της εφαρμογής από την αρχή μέχρι το τέλος, προσομοιώνοντας ενέργειες χρήστη.

Για τη συγγραφή των δοκιμών, χρησιμοποιώ Mockito ή MockK για mocking εξαρτήσεων και Hamcrest ή AssertJ για γραφή δηλώσεων επιβεβαίωσης.

// Παράδειγμα μονάδας δοκιμής με JUnit 5 και MockK
import io.mockk.every
import io.mockk.mockk
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

class MyServiceTest {

    @Test
    fun `calculateSum πρέπει να επιστρέφει το σωστό άθροισμα`() {
        // Mock την εξάρτηση
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

        val service = MyService(dependency)
        val result = service.calculateSum(20)

        // Έλεγχος αποτελέσματος
        assertEquals(30, result)
    }
}

class MyService(private val dependency: Dependency) {
    fun calculateSum(a: Int): Int {
        return a + dependency.getValue()
    }
}

interface Dependency {
    fun getValue(): Int
}
// Παράδειγμα δοκιμής UI για Android με Espresso
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.rules.ActivityScenarioRule
import org.junit.Rule
import org.junit.Test

class MainActivityTest {

    @get:Rule
    var activityRule: ActivityScenarioRule<MainActivity> = ActivityScenarioRule(MainActivity::class.java)

    @Test
    fun πάτημακουμπιούαλλάζειτοκείμενο() {
        // Βρίσκουμε το κουμπί με το id και το πατάμε
        onView(withId(R.id.button)).perform(click())

        // Ελέγχουμε ότι το κείμενο στο TextView άλλαξε
        onView(withId(R.id.textView)).check(matches(withText("Το κείμενο άλλαξε!")))
    }
}