Υπηρεσία SFUnitTests. UnitTest

Η υπηρεσία UnitTest παρέχει ένα πλαίσιο για την αυτοματοποίηση δοκιμών μονάδας χρησιμοποιώντας τη γλώσσα Basic, συμπεριλαμβανομένης της δυνατότητας να:

note

Τόσο οι δοκιμές μονάδας όσο και ο προς δοκιμή κωδικός πρέπει να είναι γραμμένοι σε Basic. Ο κώδικας που δοκιμάζεται μπορεί να καλεί συναρτήσεις γραμμένες σε άλλες γλώσσες.


warning

Η υπηρεσία UnitTest δεν είναι διαθέσιμη για σενάρια Python.


Ορισμοί

Δοκιμαστική περίπτωση

Μια δοκιμαστική περίπτωση είναι η μεμονωμένη μονάδα δοκιμής. Ελέγχει για μια συγκεκριμένη απόκριση σε ένα συγκεκριμένο σύνολο εισόδων.

Στην υπηρεσία UnitTest, μια δοκιμαστική περίπτωση αντιπροσωπεύεται από ένα μόνο Sub της Basic, του οποίου το όνομα ξεκινά με ένα κοινό πρόθεμα (η προεπιλογή είναι "Test_").

Η δοκιμαστική περίπτωση αποτυγχάνει εάν μία από τις μεθόδους AssertX επιστρέψει False.

Δοκιμαστική Σουίτα

Μια δοκιμαστική σουίτα είναι μια συλλογή από δοκιμαστικές περιπτώσεις που πρέπει να εκτελεστούν μαζί.

Όλες οι περιπτώσεις δοκιμών μιας σουίτας αποθηκεύονται σε μία μόνο ενότητα Basic.

Μια σουίτα δοκιμών μπορεί να εφαρμόσει τις μεθόδους SetUp και TearDown για να προετοιμαστεί για δοκιμαστικές περιπτώσεις στη μονάδα της.

Δοκιμή μονάδας

Μια δοκιμή πλήρους μονάδας αποτελείται από ένα σύνολο δοκιμαστικών σειρών στην ίδια βιβλιοθήκη Basic.

Κλήση υπηρεσίας

Πριν χρησιμοποιήσετε την υπηρεσία UnitTest, πρέπει να φορτωθεί ή να εισαχθεί η βιβλιοθήκη ScriptForge:

note

• Οι μακροεντολές Basic απαιτούν τη φόρτωση της βιβλιοθήκης ScriptForge χρησιμοποιώντας την ακόλουθη πρόταση:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Τα σενάρια Python απαιτούν εισαγωγή από την ενότητα scriptforge:
από το scriptforge import CreateScriptService


Απλή λειτουργία

Καλέστε την υπηρεσία σε απλή λειτουργία για να καλέσετε συναρτήσεις AssertX χωρίς να χρειάζεται να δημιουργήσετε την πλήρη ιεραρχία των σειρών δοκιμών και των δοκιμαστικών περιπτώσεων.

Σε απλή λειτουργία, η υπηρεσία καλείται μέσα στη δοκιμαστική περίπτωση, όπως φαίνεται στο παρακάτω παράδειγμα:


    Sub SimpleTest
        On Local Error GoTo CatchError
        Dim myTest As Variant
        myTest = CreateScriptService("UnitTest")
        ' Μερικές εικονικές δοκιμές
        myTest.AssertEqual(1 + 1, 2)
        myTest.AssertEqual(1 - 1, 0)
        MsgBox ("Όλες οι δοκιμές πέρασαν")
        Exit Sub
    CatchError:
        myTest.ReportError ("Μια δοκιμή απέτυχε")
    End Sub
  

Σε αυτό το παράδειγμα, εάν κάποια από τις κλήσεις AssertEqual αποτύχει, ο διερμηνέας θα μεταβεί στην ετικέτα CatchError και θα αναφέρει το σφάλμα καλώντας τη μέθοδο ReportError .

Πλήρης λειτουργία

Όταν καλείται σε πλήρη λειτουργία, η δημιουργία υπηρεσίας είναι εξωτερική του κωδικού δοκιμής και όλες οι δοκιμές οργανώνονται σε δοκιμαστικές περιπτώσεις και σειρές δοκιμών μέσα σε μία μόνο βιβλιοθήκη.

Το παρακάτω παράδειγμα δημιουργεί μια παρουσία UnitTest της οποίας οι δοκιμές βρίσκονται μέσα στο τρέχον έγγραφο (ThisComponent) στη βιβλιοθήκη "Tests".


    GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
    Dim myUnitTest As Variant
    myUnitTest = CreateScriptService("UnitTest", ThisComponent, "Tests")
  

Ένα μινιμαλιστικό παράδειγμα σε πλήρη λειτουργία

Θεωρήστε ότι ένα αρχείο ODS έχει μια λειτουργική μονάδα με το όνομα "MathUtils" στη "Τυπική" βιβλιοθήκη του με τον ακόλουθο κώδικα:


    ' Κώδικας στη λειτουργική μονάδα Standard.MathUtils
    Function Sum(a, b) As Double
        Sum = a + b
    End Function
    
    Function Multiply(a, b) As Double
        Multiply = a * b
    End Function
  

Για να δημιουργήσετε μια πλήρη δοκιμαστική σειρά, σκεφτείτε ότι μια νέα βιβλιοθήκη με το όνομα "Tests" δημιουργείται στο αρχείο με μια λειτουργική μονάδα "AllTests" που περιέχει τον παρακάτω κώδικα:


    ' Κώδικας στη λειτουργική μονάδα Tests.AllTests
    Sub Main()
        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
        Dim test As Variant
        test = CreateScriptService("UnitTest", ThisComponent, "Tests")
        test.RunTest("AllTests")
        test.Dispose()
    End Sub
    
    Sub Setup(test)
        ' Ο κώδικας προετοιμασίας εκτελέστηκε πριν από την πρώτη δοκιμαστική περίπτωση
        Dim exc As Variant
        exc = CreateScriptService("Exception")
        exc.Console(Modal := False)
    End Sub
    
    Sub TearDown(test)
        ' Κλήση προαιρετικού κωδικού καθαρισμού μετά την τελευταία δοκιμαστική περίπτωση
    End Sub
    
    Sub Test_Sum(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Sum(1, 1), 2, "Άθροισμα δύο θετικών ακεραίων")
        test.AssertEqual(Sum(-10, 20), 10, "Άθροισμα αρνητικών και θετικών ακεραίων")
        test.AssertEqual(Sum(1,5, 1), 2,5, "Άθροισμα τιμών κινητής υποδιαστολής και ακέραιων αριθμών")
        Exit Sub
    CatchError:
        test.ReportError ("Η μέθοδος άθροισης είναι κατεστραμμένη")
    End Sub
    
    Sub Test_Multiply(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Multiply(2, 2), 4, "Πολλαπλασιασμός δύο θετικών ακεραίων")
        test.AssertEqual(Multiply(-4, 2), -8, "Πολλαπλασιασμός αρνητικών και θετικών ακεραίων")
        test.AssertEqual(Multiply(1.5, 3), 4.5, "Πολλαπλασιασμός τιμών κινητής υποδιαστολής και ακεραίων")
        Exit Sub
    CatchError:
        test.ReportError ("Η μέθοδος Multiply είναι κατεστραμμένη")
    End Sub
  

Η παραπάνω σειρά δοκιμών αποτελείται από δύο δοκιμαστικές περιπτώσεις Test_Sum και Test_Multiply. Για να εκτελέσετε όλες τις δοκιμές, απλώς εκτελέστε τη μέθοδο Main από τη λειτουργική μονάδα "AllTests".

Η Console από την υπηρεσία Exception χρησιμοποιείται ως η προεπιλεγμένη έξοδος για να εκτυπώσετε τα αποτελέσματα των δοκιμών. Μετά την εκτέλεση του παραπάνω παραδείγματος, η ακόλουθη έξοδος θα εμφανιστεί στην κονσόλα:


    ' RUNTEST ENTER testsuite='Tests.AllTests', pattern='Test_*'
    '   SETUP Tests.AllTests.Setup() ENTER
    '   SETUP Tests.AllTests.Setup() EXIT
    '   TESTCASE Tests.AllTests.Test_Multiply() ENTER
    '   TESTCASE Tests.AllTests.Test_Multiply() EXIT (0,017 sec)
    '   TESTCASE Tests.AllTests.Test_Sum() ENTER
    '   TESTCASE Tests.AllTests.Test_Sum() EXIT (0,016 sec)
    '   TEARDOWN Tests.AllTests.TearDown() ENTER
    '   TEARDOWN Tests.AllTests.TearDown() EXIT
    ' RUNTEST EXIT testsuite='Tests.AllTests' (0,223 sec)
  

Εάν κάποια από τις μεθόδους AssertEqual αποτύχει κατά τη διάρκεια αυτών των δοκιμών, προστίθεται ένα μήνυμα σφάλματος στην κονσόλα.

Ιδιότητες

Όνομα

Μόνο για ανάγνωση

Τύπος

Περιγραφή

LongMessage

Όχι

Boolean

Όταν οριστεί σε True (προεπιλογή), η κονσόλα εμφανίζει το τυπικό μήνυμα που προσαρτάται στο μήνυμα που παρέχεται από τον ελεγκτή. Όταν False, χρησιμοποιείται μόνο το μήνυμα που ορίζεται από τον ελεγκτή.

ReturnCode

Ναι

Integer

Η τιμή επιστράφηκε από το RunTest μετά την ολοκλήρωση της δοκιμής μονάδας. Ακολουθεί ένας κατάλογος με πιθανές τιμές:

0 - Η δοκιμή ολοκληρώθηκε χωρίς σφάλματα, ή η δοκιμή δεν ξεκίνησε
1 - Ένας ισχυρισμός σε μια δοκιμαστική περίπτωση επέστρεψε False
2 - Ένα SkipTest εκδόθηκε από τη μέθοδο Setup, ή με μία από τις περιπτώσεις δοκιμής.
3 - Μη φυσιολογικό τέλος της δοκιμής

Verbose

Όχι

Boolean

Όταν οριστεί σε True, όλοι οι ισχυρισμοί αναφέρονται στην κονσόλα (αποτυχία ή όχι). Όταν είναι False (προεπιλογή), αναφέρονται μόνο αποτυχημένοι ισχυρισμοί.

WhenAssertionFails

Όχι

Integer

Καθορίζει τι γίνεται όταν ένας ισχυρισμός αποτυγχάνει. Ακολουθεί ένας κατάλογος με πιθανές τιμές:

0 - Αγνόηση της αποτυχίας και συνέχιση της εκτέλεσης της δοκιμής
1 - Η μέθοδος TearDown στη λειτουργική μονάδα εκτελείται στην τρέχουσα σειρά δοκιμών και ξεκινά η επόμενη σειρά (προεπιλογή σε πλήρη λειτουργία).< br/>2 - Διακοπή αμέσως (προεπιλογή σε απλή λειτουργία)


Κατάλογος μεθόδων στην υπηρεσία UnitTest

AssertAlmostEqual
AssertEqual
AssertFalse
AssertGreater
AssertGreaterEqual
AssertIn
AssertIsInstance
AssertIsNothing
AssertLike

AssertNotRegex
AssertIsNull
AssertLess
AssertLessEqual
AssertNotAlmostEqual
AssertNotEqual
AssertNotIn
AssertNotInstance
AssertNotLike

AssertNotNothing
AssertNotNull
AssertRegex
AssertTrue
Fail
Log
ReportError
RunTest
SkipTest


Ορίσματα των μεθόδων AssertX

Όλοι οι ισχυρισμοί δοκιμάζουν μία ή δύο εκφράσεις, που αναφέρονται στο υπόλοιπο αυτής της σελίδας βοήθειας ως A και B. Είναι πάντα τα πρώτα ένα ή δύο ορίσματα στη μέθοδο AssertX.

Όλες οι μέθοδοι AssertX δέχονται ένα όρισμα message που καθορίζει ένα προσαρμοσμένο μήνυμα που πρέπει να αναφέρεται στην κονσόλα σχετικά με τον ισχυρισμό. Από προεπιλογή χρησιμοποιείται μια κενή συμβολοσειρά. Αυτό το όρισμα βρίσκεται πάντα στην τελευταία θέση του ισχυρισμού.

Ορισμένες μέθοδοι AssertX δέχονται επίσης πρόσθετα ορίσματα, όπως περιγράφονται από τη σύνταξή τους παρακάτω.

AssertAlmostEqual

Επιστρέφει True όταν το A και το B είναι αριθμητικές τιμές και θεωρούνται ότι είναι κοντά η μία στην άλλη, δεδομένης μιας σχετικής ανοχής.

Σύνταξη:

svc.AssertAlmostEqual(a: any, b: any, tolerance: double = 1E-09, message: str = ""): bool

Αυτός ο ισχυρισμός επιστρέφει True εάν πληρούνται οι δύο παρακάτω προϋποθέσεις:

AssertEqual

Επιστρέφει True όταν τα A και B θεωρούνται ίσα.

Σύνταξη:

svc.AssertEqual(a: any, b: any, message: str = ""): bool

Όταν τα Α και Β είναι βαθμωτά, επιστρέφεται True εάν:

Όταν οι Α και Β είναι πίνακες, επιστρέφεται True εάν:

AssertFalse

Επιστρέφει True όταν ο τύπος του A είναι Boolean και η τιμή του είναι False.

Σύνταξη:

svc.AssertFalse(a: any, message: str = ""): bool

AssertGreater

Επιστρέφει True, όταν το A είναι μεγαλύτερο από το B.

Σύνταξη:

svc.AssertGreater(a: any, b: any, message: str = ""): bool

Η σύγκριση μεταξύ Α και Β προϋποθέτει τα εξής:

AssertGreaterEqual

Επιστρέφει True, όταν το A είναι μεγαλύτερο ή ίσο του B.

Σύνταξη:

svc.AssertGreaterEqual(a: any, b: any, message: str = ""): bool

Η σύγκριση μεταξύ Α και Β προϋποθέτει τα εξής:

AssertIn

Επιστρέφει True όταν το A βρίσκεται στο B.

Σύνταξη:

svc.AssertIn(a: any, b: any, message: str = ""): bool

Ο ισχυρισμός αυτός προϋποθέτει τα ακόλουθα:

AssertIsInstance

Επιστρέφει True, όταν το A είναι μια παρουσία ενός συγκεκριμένου τύπου αντικειμένου, που προσδιορίζεται ως συμβολοσειρά που περιέχει το όνομα του τύπου.

Σύνταξη:

svc.AssertIsInstance(a: any, objecttype: str, message: str = ""): bool

Η έκφραση Α μπορεί να είναι ένα από τα ακόλουθα:

AssertIsNothing

Επιστρέφει True όταν το A είναι ένα αντικείμενο που έχει την τιμή Nothing.

Σύνταξη:

svc.AssertIsNothing(a: any, message: str = ""): bool

AssertIsNull

Επιστρέφει True όταν το A έχει την τιμή Null.

Σύνταξη:

svc.AssertIsNull(a: any, message: str = ""): bool

AssertLess

Επιστρέφει True όταν το A είναι μικρότερο από το B.

Σύνταξη:

svc.AssertLess(a: any, b: any, message: str = ""): bool

Η σύγκριση μεταξύ Α και Β προϋποθέτει τα εξής:

AssertLessEqual

Επιστρέφει True όταν το A είναι μικρότερο ή ίσο του B.

Σύνταξη:

svc.AssertLessEqual(a: any, b: any, message: str = ""): bool

Η σύγκριση μεταξύ Α και Β προϋποθέτει τα εξής:

AssertLike

Επιστρέφει True, εάν η συμβολοσειρά Α αντιστοιχεί σε ένα δεδομένο μοτίβο που περιέχει χαρακτήρες υποκατάστασης.

Σύνταξη:

svc.AssertLike(a: any, pattern: str = "", message: str = ""): bool

Οι παρακάτω χαρακτήρες υποκατάστασης γίνονται δεκτοί:

AssertNotAlmostEqual

Επιστρέφει True όταν το A και το B είναι αριθμητικές τιμές και δεν θεωρούνται ότι βρίσκονται κοντά η μια στην άλλη, δεδομένης μιας σχετικής ανοχής.

Σύνταξη:

svc.AssertNotAlmostEqual(a: any, b: any, tolerance: double = 1E-09, message: str = ""): bool

Αυτός ο ισχυρισμός επιστρέφει True εάν πληρούνται οι δύο παρακάτω προϋποθέσεις:

AssertNotEqual

Επιστρέφει True, όταν τα A και B δεν θεωρούνται ίσα.

Σύνταξη:

svc.AssertNotEqual(a: any, b: any, message: str = ""): bool

Αυτή η μέθοδος λειτουργεί τόσο για βαθμωτές όσο και για πίνακες. Διαβάστε τις οδηγίες στο AssertEqual για περισσότερες πληροφορίες σχετικά με το τι σημαίνει ισότητα σε αυτόν τον ισχυρισμό.

AssertNotIn

Επιστρέφει True, όταν το A (μια συμβολοσειρά) δεν βρίσκεται στο B.

Σύνταξη:

svc.AssertNotIn(a: any, b: any, message: str = ""): bool

Διαβάστε τις οδηγίες στο AssertIn για περισσότερες πληροφορίες σχετικά με τις υποθέσεις αυτής της μεθόδου.

AssertNotInstance

Επιστρέφει True, όταν το A δεν είναι μια παρουσία ενός συγκεκριμένου τύπου αντικειμένου.

Σύνταξη:

svc.AssertNotInstance(a: any, objecttype: str, message: str = ""): bool

Διαβάστε τις οδηγίες στο AssertIsInstance για περισσότερες πληροφορίες σχετικά με τις υποθέσεις αυτής της μεθόδου.

AssertNotLike

Επιστρέφει True, εάν η συμβολοσειρά A δεν ταιριάζει με ένα δεδομένο μοτίβο που περιέχει χαρακτήρες υποκατάστασης.

Σύνταξη:

svc.AssertNotLike(a: any, pattern: str = "", message: str = ""): bool

Διαβάστε τις οδηγίες στο AssertLike για περισσότερες πληροφορίες σχετικά με τις υποθέσεις αυτής της μεθόδου.

AssertNotNothing

Επιστρέφει True εκτός από την περίπτωση που το A είναι ένα αντικείμενο που έχει την τιμή Nothing.

Σύνταξη:

svc.AssertNotNothing(a: any, message: str = ""): bool

AssertNotNull

Επιστρέφει True, εκτός εάν το A έχει την τιμή Null.

Σύνταξη:

svc.AssertNotNull(a: any, message: str = ""): bool

AssertNotRegex

Επιστρέφει True, όταν το A δεν είναι συμβολοσειρά ή δεν ταιριάζει με τη δεδομένη κανονική έκφραση.

Σύνταξη:

svc.AssertNotRegex(a: any, regex: str = "", message: str = ""): bool

Η σύγκριση γίνεται με διάκριση πεζών-κεφαλαίων.

AssertRegex

Επιστρέφει True, όταν η συμβολοσειρά Α ταιριάζει με τη δεδομένη κανονική έκφραση.

Σύνταξη:

svc.AssertRegex(a: any, regex: str = "", message: str = ""): bool

Η σύγκριση γίνεται με διάκριση πεζών-κεφαλαίων.

AssertTrue

Επιστρέφει True, όταν η έκφραση A είναι Boolean και η τιμή της είναι True.

Σύνταξη:

svc.AssertTrue(a: any, message: str = ""): bool

Fail

Αναγκάζει μια δοκιμαστική περίπτωση να αποτύχει.

Σύνταξη:

svc.Fail(message: str = "")

Μπορεί να παρασχεθεί ένα μήνυμα για αναφορά στην κονσόλα.

Log

Γράφει το καθορισμένο message στην κονσόλα.

Σύνταξη:

svc.Log(message: str = "")

Μπορεί να παρασχεθεί ένα μήνυμα για αναφορά στην κονσόλα.

ReportError

Εμφανίζει ένα πλαίσιο μηνύματος με ένα μήνυμα και τις τρέχουσες τιμές ιδιοτήτων της υπηρεσίας Exception.

Αυτή η μέθοδος χρησιμοποιείται συνήθως στην ενότητα χειρισμού εξαιρέσεων του Sub που περιέχει τη δοκιμαστική περίπτωση, η οποία επιτυγχάνεται όταν ένας ισχυρισμός αποτυγχάνει ή όταν καλείται η μέθοδος Fail.

Σύνταξη:

svc.ReportError(message: str = "")

Ανάλογα με την τιμή της ιδιότητας WhenAssertionFails, η εκτέλεση της δοκιμής μπορεί να συνεχιστεί ή να διακοπεί.

Όταν γράφετε δοκιμαστικές περιπτώσεις, συνιστάται να συμπεριλάβετε μια κλήση στη μέθοδο ReportError στην ενότητα χειρισμού εξαιρέσεων του Sub.

Εάν η ιδιότητα LongMessage ισούται με True, το καθορισμένο message ακολουθείται από την τυπική περιγραφή του μηνύματος σφάλματος. Διαφορετικά εμφανίζεται μόνο το message.

RunTest

Εκτελεί την πλήρη σειρά δοκιμών που υλοποιείται στην καθορισμένη ενότητα. Κάθε δοκιμαστική περίπτωση εκτελείται ανεξάρτητα το ένα από το άλλο.

Η εκτέλεση μιας δοκιμαστικής σειράς αποτελείται από:

  1. Εκτέλεση της προαιρετικής μεθόδου Setup που υπάρχει στη λειτουργική μονάδα.

  2. Εκτέλεση μία φορά κάθε δοκιμαστική περίπτωση, χωρίς συγκεκριμένη σειρά.

  3. Εκτέλεση της προαιρετικής μεθόδου TearDown που υπάρχει στη λειτουργική μονάδα.

Σύνταξη:

svc.RunTest(testsuite: str, testcasepattern: str = "", message: str = ""): int

Το όρισμα testcasepattern καθορίζει ένα μοτίβο που αποτελείται από "?" και χαρακτήρες υποκατάστασης "*" για να επιλέξετε ποιες δοκιμαστικές περιπτώσεις θα εκτελεστούν. Η σύγκριση δεν κάνει διάκριση πεζών-κεφαλαίων.

Εάν παρέχεται ένα message, γράφεται στην κονσόλα όταν ξεκινά η δοκιμή.

SkipTest

Διακόπτει την τρέχουσα δοκιμαστική σειρά χωρίς να καλεί τη μέθοδο TearDown.

Η παράλειψη μιας δοκιμής έχει συνήθως νόημα κατά τη μέθοδο Setup, όταν δεν πληρούνται όλες οι προϋποθέσεις για την εκτέλεση της δοκιμής.

Εναπόκειται στη μέθοδο Setup να βγείτε από το Sub λίγο μετά την κλήση SkipTest.

Εάν το SkipTest καλείται μέσα από μια δοκιμαστική περίπτωση, η εκτέλεση της σειράς δοκιμών διακόπτεται και οι υπόλοιπες περιπτώσεις δοκιμής δεν εκτελούνται. Λάβετε υπόψη ότι η σειρά με την οποία εκτελούνται οι περιπτώσεις δοκιμών είναι αυθαίρετη σε μια ομάδα δοκιμών.

Σύνταξη:

svc.SkipTest(message: str = "")

Εάν παρέχεται ένα message, γράφεται στην κονσόλα.

Παρακαλούμε, υποστηρίξτε μας!