Asercje
Wyrazi Pan/Pani oczekiwane zachowanie.
Asercje to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Do czego służą asercje
Asercja jest najważniejszym elementem testu. Stwierdza fakt, który musi być prawdziwy. Jeśli jest prawdziwy, test jest kontynuowany. Jeśli nie, busted rejestruje niepowodzenie wraz z pomocnym komunikatem.
busted korzysta z biblioteki luassert, dostępnej za pośrednictwem globalnej tabeli assert.
assert.are.equal(4, 2 + 2)are.equal
assert.are.equal sprawdza równość za pomocą operatora ==. Pierwszy argument to wartość oczekiwana, a drugi — wartość rzeczywista.
Działa to dla liczb, ciągów znaków i wartości logicznych, ale w przypadku tabel porównywana jest tożsamość, a nie zawartość.
assert.are.equal("hello", greet())
assert.are.equal(10, count)are.same dla tabel
Do głębokiego porównywania zawartości tabel należy używać assert.are.same. Funkcja ta rekurencyjnie sprawdza, czy dwie tabele zawierają równe wartości.
Elementu same należy używać dla struktur danych, a equal dla wartości prostych lub sprawdzania tożsamości.
assert.are.same({1, 2, 3}, split("1,2,3"))
assert.are.same({x = 1}, point)Prawdziwość
assert.is_true i assert.is_false sprawdzają dokładne wartości logiczne. assert.is_truthy akceptuje wszystko, co nie jest nil ani false.
Wariant ścisły należy wybierać wtedy, gdy oczekiwany jest konkretnie wynik logiczny.
assert.is_true(user.active)
assert.is_truthy(find("x"))
assert.is_false(list:isEmpty())Sprawdzanie nil
assert.is_nil sprawdza, czy wartość jest nil, a assert.is_not_nil — czy jest obecna. Są to często używane asercje podczas sprawdzania wyników wyszukiwania.
Dzięki nim intencja jest wyraźniejsza niż przy porównywaniu z nil za pomocą equal.
assert.is_nil(map["missing"])
assert.is_not_nil(map["found"])Negowanie za pomocą is_not
Większość asercji można zanegować, wstawiając is_not lub używając formy are_not. Wyraża to wymaganie, aby wartości się różniły.
Na przykład assert.are_not.equal przechodzi, gdy dwie wartości są różne.
assert.are_not.equal(1, 2)
assert.is_not_nil(result)Testowanie błędów
Aby sprawdzić, czy kod zgłasza błąd, należy opakować go w funkcję i przekazać ją do assert.has_error. busted wywołuje funkcję i potwierdza, że wystąpił błąd.
Można również sprawdzić komunikat błędu, przekazując oczekiwany tekst jako drugi argument.
assert.has_error(function()
withdraw(-5)
end, "amount must be positive")has_no.errors
Odwrotnym sprawdzeniem jest assert.has_no.errors. Przechodzi ono, gdy opakowana funkcja kończy działanie bez zgłaszania błędu.
Jest to przydatne do potwierdzenia, że poprawna ścieżka wykonania nie kończy się awarią, nawet jeśli wynik funkcji nie jest sprawdzany.
assert.has_no.errors(function()
parse("valid input")
end)Własne komunikaty błędów
Do większości asercji można dołączyć komunikat wyjaśniający przyczynę niepowodzenia. Należy przekazać go jako dodatkowy argument, aby raport opisywał oczekiwanie.
Jasne komunikaty zmieniają nieczytelny błąd w informację, na podstawie której można podjąć działanie.
assert.is_true(ok, "login should succeed")Dopasowywanie za pomocą modyfikatorów
luassert udostępnia modyfikatory i matchery umożliwiające wykonywanie bardziej rozbudowanych sprawdzeń. Na przykład assert.matches sprawdza tekst względem wzorca Lua.
Jest to przydatne, gdy dokładne sprawdzenie równości jest zbyt restrykcyjne dla zmiennego wyniku.
assert.matches("%d%d%d%d", get_year())
assert.matches("error", log_line, 1, true)Wybór właściwej asercji
Dla większej przejrzystości należy wybierać najbardziej szczegółową asercję. same służy do tabel, equal do wartości prostych, has_error do błędów, a sprawdzenia prawdziwości do wartości logicznych.
Szczegółowe asercje generują lepsze komunikaty błędów, co przyspiesza debugowanie.
describe("queue", function()
it("dequeues in order", function()
assert.are.same({"a", "b"}, q:drain())
end)
end)Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat asercji busted.
Podsumowanie
luassert dostarcza tabelę assert używaną przez busted. Elementu are.equal należy używać do wartości prostych, are.same do głębokiego porównywania tabel, a sprawdzeń prawdziwości lub nil tam, gdzie jest to właściwe.
Błędy należy testować za pomocą has_error, a pomyślne wykonanie za pomocą has_no.errors. Negowanie odbywa się przez is_not, a dodanie komunikatów zapewnia czytelniejsze raporty.
Często zadawane pytania
Czy lekcja „Asercje” jest bezpłatna?
Tak — pełny tekst „Asercje” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Asercje”?
Wyrazi Pan/Pani oczekiwane zachowanie. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Asercje”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.