Οι δοκιμές εφαρμογών κινητών είναι η διαδικασία επαλήθευσης ότι μια εφαρμογή λειτουργεί σωστά, δεν καταρρέει και πληροί τις απαιτήσεις. Σύμφωνα με το Software Testing Help (2025), οι αυτοματοποιημένες δοκιμές μειώνουν τον χρόνο των ελέγχων παλινδρόμησης κατά 70–80% σε σύγκριση με τις χειροκίνητες δοκιμές. Σε αυτό το άρθρο, θα εξετάσουμε τα επίπεδα δοκιμών, τα εργαλεία για iOS και Android, το TDD και το BDD, καθώς και το CI/CD για δοκιμές.
Βασικά σημεία
Οι δοκιμές μονάδας είναι το θεμέλιο των δοκιμών εφαρμογών κινητών. Επαληθεύουν τη μικρότερη μονάδα κώδικα — μία συνάρτηση, μέθοδο ή κλάση απομονωμένη από το υπόλοιπο σύστημα. Στην ανάπτυξη κινητών, οι δοκιμές μονάδας γράφονται σε JUnit (Android) και XCTest (iOS). Μια καλή δοκιμή μονάδας πρέπει να είναι γρήγορη, ανεξάρτητη και επαναλήψιμη — δεν πρέπει να εξαρτάται από το δίκτυο, τη βάση δεδομένων ή τα στοιχεία UI. Για απομόνωση χρησιμοποιούνται διπλότυπα δοκιμών: mock, stub και fake.
Mockito (Java/Kotlin) και MockK (Kotlin-first) είναι δημοφιλείς βιβλιοθήκες για δημιουργία αντικειμένων mock στο Android. Στο iOS χρησιμοποιούνται OCMock, Cuckoo ή χειροκίνητα πρωτόκολλα. Κανόνας: οι δοκιμές μονάδας πρέπει να καλύπτουν την επιχειρηματική λογική και τα μοντέλα δεδομένων. Οι δοκιμές UI δεν πρέπει να αντιγράφουν τις δοκιμές μονάδας — επαληθεύουν την αλληλεπίδραση του χρήστη με τη διεπαφή.
Οι δοκιμές ολοκλήρωσης επαληθεύουν την αλληλεπίδραση μεταξύ στοιχείων: αποθετήριο με βάση δεδομένων, ViewModel με υπηρεσία API, πλοήγηση μεταξύ οθονών. Σε αντίθεση με τις δοκιμές μονάδας, οι δοκιμές ολοκλήρωσης χρησιμοποιούν πραγματικές ή κοντινές στην πραγματικότητα εξαρτήσεις (π.χ. βάση δεδομένων στη μνήμη ή διακομιστή mock). Robolectric είναι ένα πλαίσιο για εκτέλεση δοκιμών Android σε JVM χωρίς εξομοιωτή, επιταχύνοντας τις δοκιμές ολοκλήρωσης 10 φορές.
Οι δοκιμές στιγμιότυπου (Golden Tests) είναι ένα ειδικό είδος δοκιμής ολοκλήρωσης που συγκρίνουν ένα στοιχείο UI που έχει αποδοθεί με μια εικόνα αναφοράς (στιγμιότυπο). Εάν η εμφάνιση αλλάξει, η δοκιμή αποτυγχάνει — ο προγραμματιστής βλέπει τι άλλαξε. Το Facebook SnapshotTestCase (iOS) και το Shot (Android) είναι δημοφιλή εργαλεία για δοκιμές στιγμιότυπου.
Οι δοκιμές E2E (από άκρο σε άκρο) επαληθεύουν το πλήρες σενάριο χρήστη από την αρχή έως το τέλος: εκκίνηση εφαρμογής, σύνδεση, εκτέλεση ενέργειας, έλεγχος αποτελέσματος. Οι δοκιμές UI είναι ένα υποσύνολο των E2E που εστιάζει στη διεπαφή. Εργαλεία: Espresso (Android), XCUITest (iOS), Detox (React Native). Οι δοκιμές E2E είναι οι πιο αργές, επομένως εκτελούνται ξεχωριστά στο CI — συνήθως σε νυχτερινές εκδόσεις.
XCTest είναι το ενσωματωμένο πλαίσιο της Apple για δοκιμές μονάδας εφαρμογών κινητών. Το XCTestRunner εκτελεί δοκιμές στον προσομοιωτή ή σε μια πραγματική συσκευή. Οι δοκιμές κληρονομούν από το XCTestCase, περιέχουν setUp και tearDown για προετοιμασία και καθαρισμό. Το XCTest περιλαμβάνει XCTAssert για ισχυρισμούς (XCTAssertEqual, XCTAssertNil, XCTAssertTrue) και XCTWaiter για αναμονή ασύγχρονων λειτουργιών.
Παράδειγμα απλής δοκιμής XCTest: δημιουργία μοντέλου User, έλεγχος ορθότητας αρχικοποίησης, μορφοποίησης ονόματος και υπολογισμού ηλικίας. Code Coverage στο Xcode δείχνει ποιες γραμμές κώδικα καλύπτονται από δοκιμές — ο στόχος για εμπορικά έργα: τουλάχιστον 70–80% κάλυψη επιχειρηματικής λογικής. Το XCTest είναι ενσωματωμένο με τον Xcode Server και συστήματα CI μέσω xcodebuild test.
XCUITest είναι το πλαίσιο της Apple για δοκιμές UI. Λειτουργεί μέσω αναγνωριστικών προσβασιμότητας: το XCUIElementQuery βρίσκει κουμπιά, πεδία εισόδου, πίνακες ανά ετικέτα, αναγνωριστικό ή τύπο. Το XCUITest καταγράφει μια ακολουθία ενεργειών (εγγραφή/αναπαραγωγή) και παράγει κώδικα δοκιμής. Σημαντικό: όλα τα στοιχεία UI πρέπει να έχουν accessibilityIdentifier για σταθερή λειτουργία των δοκιμών.
JUnit είναι το βασικό πλαίσιο για δοκιμές μονάδας εφαρμογών κινητών σε Java/Kotlin. Στο Android χρησιμοποιούνται JUnit 4 (τελευταία σταθερή έκδοση 4.13.2) και JUnit 5 για νέα έργα. Mockito είναι μια βιβλιοθήκη για δημιουργία αντικειμένων mock: when(mock.method()).thenReturn(value) — ένα τυπικό μοτίβο για απομόνωση της ελεγχόμενης κλάσης από εξαρτήσεις.
Παράδειγμα δοκιμής JUnit για Android:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class LoginViewModelTest {
@Mock
AuthRepository authRepository;
@Test
public void login_emptyEmail_returnsError() {
LoginViewModel vm = new LoginViewModel(authRepository);
String result = vm.login("", "password123");
assertEquals("Email cannot be empty", result);
verify(authRepository, never()).authenticate(any());
}
}
Espresso είναι το πλαίσιο της Google για δοκιμές UI Android. Το Espresso συγχρονίζεται αυτόματα με το νήμα UI: onView(withId(R.id.button)).perform(click()).check(matches(isDisplayed())). Το Espresso είναι εύκολο στη σύνταξη και σταθερό χάρη στην ενσωματωμένη αναμονή κατάστασης αδράνειας. UI Automator είναι ένα πλαίσιο για δοκιμές μεταξύ εφαρμογών που μπορεί να αλληλεπιδράσει με στοιχεία συστήματος (παράθυρα διαλόγου αδειών, σκιά ειδοποιήσεων).
Detox είναι ένα πλαίσιο E2E γκρίζου κουτιού για δοκιμή εφαρμογών κινητών React Native από την Wix. Το Detox λειτουργεί και στις δύο πλατφόρμες από μία ενιαία βάση κώδικα δοκιμών, χρησιμοποιώντας Espresso (Android) και XCUITest (iOS) εσωτερικά. Το Detox περιμένει αυτόματα μέχρι η εφαρμογή να γίνει αδρανής (χωρίς κινούμενα σχέδια, αιτήματα δικτύου, χρονοδιακόπτες) και μόνο τότε εκτελεί την επόμενη ενέργεια.
Appium είναι ένα καθολικό διαπλατφορμικό πλαίσιο που υποστηρίζει Android, iOS, Web και υβριδικές εφαρμογές. Το Appium χρησιμοποιεί το πρωτόκολλο WebDriver και υποστηρίζει οποιαδήποτε γλώσσα προγραμματισμού (Java, Python, JS, Ruby). Ο διακομιστής Appium λειτουργεί ως διακομιστής HTTP που μεταφράζει εντολές σε εγγενείς εντολές UI Automator / XCUITest. Το κύριο μειονέκτημα του Appium είναι η ταχύτητα: οι δοκιμές εκτελούνται πιο αργά από τις εγγενείς Espresso ή XCUITest.
| Κριτήριο | iOS | Android |
|---|---|---|
| Δοκιμές μονάδας | XCTest | JUnit 4/5 + Mockito |
| Δοκιμές UI | XCUITest | Espresso, UI Automator |
| Δοκιμές στιγμιότυπου | FBSnapshotTestCase | Shot, Roborazzi |
| Αυτοματοποίηση χειρονομιών | XCUIGesture | UiAutomator touch |
| Κάλυψη κώδικα | Xcode Code Coverage | Jacoco |
| Ενσωμάτωση CI | xcodebuild test | Gradle connectedCheck |
TDD είναι μια μεθοδολογία δοκιμών εφαρμογών κινητών όπου η δοκιμή γράφεται πριν από τον κώδικα υλοποίησης. Ο κύκλος Red-Green-Refactor: (1) γράψτε μια δοκιμή που αποτυγχάνει (Red), (2) γράψτε ελάχιστο κώδικα για να περάσει η δοκιμή (Green), (3) αναδιαμορφώστε τον κώδικα διατηρώντας την επιτυχία της δοκιμής. Το TDD παρέχει 100% κάλυψη δοκιμών για νέα λειτουργικότητα και καθαρή αρχιτεκτονική, καθώς η δοκιμή είναι η πρώτη προδιαγραφή της απαίτησης.
BDD είναι μια επέκταση του TDD όπου οι δοκιμές γράφονται σε φυσική γλώσσα σε μορφή Given-When-Then. Given (πλαίσιο) — When (ενέργεια) — Then (αναμενόμενο αποτέλεσμα). Οι δοκιμές BDD είναι κατανοητές από όλα τα μέλη της ομάδας: προγραμματιστές, ελεγκτές, αναλυτές και πελάτες. Mock έναντι Stub έναντι Fake: Το Mock επαληθεύει την αλληλεπίδραση (αν κλήθηκε η μέθοδος), το Stub επιστρέφει σταθερά δεδομένα, το Fake είναι μια απλοποιημένη λειτουργική υλοποίηση (π.χ., βάση δεδομένων στη μνήμη). Στην IT Sectr, χρησιμοποιούμε TDD για κρίσιμη επιχειρηματική λογική και BDD για σενάρια αποδοχής.
Διπλότυπα δοκιμών είναι η γενική ονομασία για αντικείμενα που αντικαθιστούν πραγματικές εξαρτήσεις σε δοκιμές. Υπάρχουν τέσσερις τύποι: Dummy (αντικείμενο για συμπλήρωση παραμέτρων, δεν χρησιμοποιείται), Stub (επιστρέφει δεδομένες τιμές), Spy (καταγράφει κλήσεις για επαλήθευση), Mock (προκαθορίζει αναμενόμενες κλήσεις). Η κατανόηση της διαφοράς είναι κρίσιμη για τον σωστό σχεδιασμό δοκιμών.
CI/CD — Συνεχής Ενσωμάτωση και Συνεχής Παράδοση: η πρακτική της αυτόματης δημιουργίας και δοκιμής εφαρμογών κινητών σε κάθε αλλαγή κώδικα. Στην ανάπτυξη κινητών, η γραμμή CI/CD περιλαμβάνει: linting, δοκιμές μονάδας, δοκιμές ολοκλήρωσης, δημιουργία APK/IPA και δοκιμές UI. GitHub Actions και Bitrise είναι δημοφιλείς πλατφόρμες για κινητό CI/CD. Οι δοκιμές πρέπει να εκτελούνται γρήγορα: δοκιμές μονάδας σε 1–2 λεπτά, ολοκλήρωσης σε 5–10, UI σε 15–30 λεπτά.
Device Farm είναι μια φάρμα πραγματικών συσκευών για δοκιμές. Το Firebase Test Lab (Android) και το Xcode Cloud (iOS) παρέχουν πρόσβαση στο cloud σε εκατοντάδες μοντέλα συσκευών. Το Device Farm αποκαλύπτει προβλήματα που δεν είναι ορατά σε εξομοιωτές: διαφορετικά μεγέθη οθόνης, απόδοση σε παλαιότερες συσκευές, προβλήματα συμβατότητας. Στην IT Sectr, χρησιμοποιούμε τακτικά το Firebase Test Lab για Android και το Xcode Cloud για iOS.
Συχνές ερωτήσεις
Για εμπορικά έργα, τουλάχιστον 70–80% κάλυψη επιχειρηματικής λογικής. Ο κώδικας UI είναι πιο δύσκολο να καλυφθεί — 50% είναι αρκετό. Το σημαντικό δεν είναι το ποσοστό αλλά η ποιότητα των δοκιμών: δοκιμάστε κρίσιμα σενάρια, ακραίες περιπτώσεις και διαχείριση σφαλμάτων.
Mock επαληθεύει την αλληλεπίδραση — αν κλήθηκε μια συγκεκριμένη μέθοδος με συγκεκριμένες παραμέτρους. Το Stub επιστρέφει προκαθορισμένα δεδομένα. Το Mock ελέγχει τη συμπεριφορά, το Stub ελέγχει την κατάσταση.
Ναι, αλλά μόνο για κρίσιμα σενάρια: σύνδεση, εγγραφή, ολοκλήρωση παραγγελίας, πληρωμή. Οι δοκιμές UI είναι αργές και εύθραυστες — μην γράφετε δοκιμή για κάθε οθόνη. Επικεντρωθείτε στα σενάρια E2E του χρήστη.
Snapshot Test (Golden Test) συγκρίνει ένα στοιχείο UI που έχει αποδοθεί με μια εικόνα αναφοράς. Εάν η εμφάνιση αλλάξει (γραμματοσειρά, περιθώριο, χρώμα), η δοκιμή αποτυγχάνει — ο προγραμματιστής ελέγχει αν η αλλαγή είναι σκόπιμη. Ιδανικό για βιβλιοθήκες στοιχείων.
Εκτελέστε τις δοκιμές E2E παράλληλα σε πολλές συσκευές, χρησιμοποιήστε το Cloud Device Farm και χωρίστε τις δοκιμές σε ανεξάρτητες ομάδες. Βελτιστοποιήστε τις δοκιμές: ελαχιστοποιήστε τις αναμονές, χρησιμοποιήστε mock για αιτήματα δικτύου.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.