Arrange-Act-Assert (AAA) είναι ένα μοτίβο για τη δόμηση των δοκιμών (tests) σαφώς σε τρεις φάσεις: Arrange (προετοιμασία), Act (εκτέλεση της ενέργειας), Assert (επιβεβαίωση του αποτελέσματος). Κάνει τις δοκιμές ευανάγνωστες, οργανωμένες και εύκολα κατανοητές.
Οι τρεις φάσεις
ARRANGE → set up the test: create objects, prepare inputs, configure mocks, set state
ACT → perform the ACTION being tested (call the function/method under test)
ASSERT → verify the OUTCOME: check the result/behavior matches what's expected
→ A clear three-part structure for every test.
Παράδειγμα
test('Cart calculates total with discount', () => {
// ARRANGE — set up
const cart = new Cart();
cart.add({ price: 100 });
cart.applyDiscount(0.1); // 10% off
// ACT — perform the action under test
const total = cart.getTotal();
// ASSERT — verify the result
expect(total).toBe(90);
});
Οι τρεις φάσεις είναι οπτικά σαφείς (συχνά χωρισμένες με κενές γραμμές ή σχόλια), κάνοντας την πρόθεση της δοκιμής προφανή: τι προετοιμάζεται, τι γίνεται, τι ελέγχεται.
Γιατί βοηθά το AAA
✓ READABILITY — clear structure; easy to see setup vs action vs verification
✓ FOCUS — encourages testing ONE action per test (one clear Act)
✓ MAINTAINABILITY — consistent structure across tests; easy to understand/modify
✓ Spot problems — too much in Arrange (complex setup) or multiple Acts (testing too much)
→ (Given-When-Then is the same idea, in BDD terms: Given setup, When action, Then outcome.)
Γιατί έχει σημασία
Η κατανόηση του μοτίβου Arrange-Act-Assert είναι πολύτιμη γιατί παρέχει μια απλή, αποτελεσματική δομή για τη σύνταξη σαφών, διατηρήσιμων δοκιμών, επομένως είναι χρήσιμη πρακτική γνώση.
Το μοτίβο — δόμηση κάθε δοκιμής σε Arrange (προετοιμασία του περιεχομένου της δοκιμής, εισόδων και κατάστασης), Act (εκτέλεση της μοναδικής ενέργειας που δοκιμάζεται), και Assert (επιβεβαίωση ότι το αποτέλεσμα ταιριάζει με τις προσδοκίες) — κάνει τις δοκιμές ευανάγνωστες και καλώς οργανωμένες, με την πρόθεση αμέσως σαφή (τι προετοιμάζεται, τι γίνεται, τι ελέγχεται).
Η κατανόηση του γιατί βοηθά το AAA είναι η κύρια αξία: βελτιώνει την αναγνωσιμότητα (η σαφής δομή τριών μερών κάνει τις δοκιμές εύκολο να ακολουθηθούν), ενθαρρύνει την εστίαση (μία ενέργεια ανά δοκιμή, αφού υπάρχει μια σαφής Act φάση — προάγοντας εστιασμένες δοκιμές που επιβεβαιώνουν μία συμπεριφορά), βελτιώνει τη διατηρησιμότητα (συνεπής δομή σε όλη την σουίτα δοκιμών), και βοηθά στο εντοπισμό προβλημάτων (υπερβολική προετοιμασία στο Arrange σηματοδοτεί σύνθετες εξαρτήσεις, πολλαπλές Acts σηματοδοτούν μία δοκιμή που κάνει πάρα πολλά).
Το ακολούθημα του AAA παράγει δοκιμές που είναι εύκολο να γραφούν, να κατανοηθούν και να διατηρηθούν — πολύτιμο αφού οι δοκιμές είναι κώδικας που πρέπει να κατανοηθεί και να τροποποιηθεί με το χρόνο, και ασαφείς δοκιμές είναι ένα πραγματικό φορτίο διατήρησης.
Η γνώση ότι το Given-When-Then (η διατύπωση BDD: Given προετοιμασία, When ενέργεια, Then αποτέλεσμα) είναι η ίδια ιδέα συνδέει το AAA με προσεγγίσεις που προάγουν τη συμπεριφορά (behavior-driven).
Αφού η σύνταξη σαφών, καλώς δομημένων, διατηρήσιμων δοκιμών είναι σημαντική (οι δοκιμές είναι κώδικας που πρέπει να κατανοηθεί και να συντηρηθεί) και το AAA παρέχει μια απλή, αποτελεσματική δομή γι' αυτό, και αφού η κατανόηση του μοτίβου και των οφελών του βοηθά να γράψουμε καλύτερες δοκιμές, η κατανόηση του μοτίβου Arrange-Act-Assert είναι πολύτιμη, πρακτικά σχετική γνώση — μια απλή αλλά αποτελεσματική πρακτική για τη σύνταξη σαφών, εστιασμένων, διατηρήσιμων δοκιμών, ευρέως χρησιμοποιούμενη και άξια εφαρμογής για καλύτερη ποιότητα δοκιμών, μια χρήσιμη συνήθεια για όποιον γράφει δοκιμές.
