assert-what-the-generator-found
Generator, który się wywala, mówi ci, że zawiódł; taki, który zwraca wiarygodne wyjście, nie mówi nic. Testuj to, co znalazł, nigdy to, że się wykonał.
Nadane przez osobę, która przeczytała kartę, a nie deklarowane przez sam plik. Karta, którą agent destyluje podczas przebiegu z niezaufaną treścią, rodzi się skażona i czeka na recenzję, zanim kiedykolwiek zostanie pobrana.
Kiedy przychodzi na myśl
- napisany generator kodu
- testowanie zrzutu schematu
- wynik wygląda dobrze
- wyciąganie struktury z biblioteki
Wartość zwykle kryje się w Unikaj i Sprawdź. Rób to sekcja, którą pisze każdy.
Treść karty powyżej to tłumaczenie. Angielski oryginał jest tym, co importuje CLI, co agent czyta w czasie działania i czego dotyczy hasz poniżej.
Wyzwalacz
Napisałeś coś, co odczytuje jedną reprezentację i tworzy inną: zrzut schematu, ekstraktor referencji, migrację, scraper, budowniczy indeksu. Cokolwiek, czego wyniku nikt nie czyta w całości, bo jest go zbyt dużo.
Nie dotyczy to funkcji zwracającej jedną wartość, którą można ocenić na oko. Ryzyko dotyczy tu konkretnie wyniku na tyle dużego, że "wygląda dobrze" to jedyna recenzja, jaką kiedykolwiek dostanie.
Rób
- Zanim napiszesz test, nazwij liczbę. Ile poleceń, wierszy, plików czy pól powinno wyjść? Weź tę liczbę skądś innego niż z generatora — ze źródła, z dokumentacji, z ręcznego przeliczenia.
- Sprawdzaj liczbę albo jej dolną granicę.
assert len(groups) >= 10, a nieassert result. - Sprawdzaj obecność konkretnych, nazwanych elementów, które na pewno muszą istnieć. Trzy lub cztery wystarczą — wybierz je z różnych kształtów wejścia.
- Jeśli generator klasyfikuje rzeczy, sprawdzaj, że każda klasa jest niepusta. Klasyfikator, który wrzuca wszystko do jednego kosza, to właśnie błąd, który to wyłapuje.
Unikaj
assert build() — przechodzi, gdy generator zwróci pustą listę, listę częściową albo listę,
w której każdy element jest subtelnie złego rodzaju.
Unikaj też ufania isinstance przy przechodzeniu przez strukturę zewnętrznej biblioteki.
Biblioteki wendorują swoje zależności: TyperGroup nie jest instancją click.Group
zaimportowanego w twoim pliku, bo Typer dostarcza własną kopię Click. Pytaj, czy obiekt ma to,
czego potrzebujesz — mapowanie commands, metodę items — a nie jaką klasę deklaruje. Duck-typing
przetrwa zwendorowaną zależność i zmianę wersji głównej; sprawdzenie klasy nie przetrwa żadnego
z nich i zawodzi przez błędną klasyfikację, a nie przez wyjątek.
Sprawdź
Celowo zepsuj generator i patrz, jak test pada. Zakomentuj rekurencję w podpolecenia albo spraw, by sprawdzenie typu odrzucało wszystko, i uruchom zestaw testów.
Jeśli zestaw dalej przechodzi, test sprawdza tylko to, że generator się uruchomił — a to właśnie test, przed którym ta umiejętność ma chronić.
Ryzyko
Zaszycie dokładnej liczby na sztywno zamienia test w obowiązek konserwacyjny: każde legalnie
dodane polecenie zmienia go na czerwony. Wybieraj dolną granicę (>= 10) plus nazwane elementy,
a dokładne liczby zostaw rzeczom, które naprawdę nie powinny się zmieniać bez decyzji.
Jest też granica tej metody. Te asercje wyłapują generator, który zgubił całą kategorię. Nie wyłapują takiego, który myli jedno pole w jednym elemencie, i udawanie inaczej to swój własny rodzaj fałszywej pewności.
Jak użyć
Karta to dane. Sklonuj repozytorium i zaimportuj ją ścieżką — to, co przychodzi przez sieć, jest traktowane jako skażone i wstrzymywane do zatwierdzenia. Taki jest pożądany sposób działania i dlatego nie ma tu instalatora w jednej linijce.
git clone https://github.com/brcampidelli/chimera-agent.gitchimera skills-import chimera-agent/skills/assert-what-the-generator-found/SKILL.mdIntegralność
SHA-256 pliku w postaci opublikowanej. Importujący może sprawdzić, że otrzymał dokładnie to, co pokazała ta strona.
0ffc1fdde72d3f2c416461f0f312ca5ca2a43d3b1ff33aaf7b20be155de711c9