27/09/2023
Počul si už o golden file, alebo golden testingu?
Asi každý z nás, kto tvorí kód, píše aj unit testy. Golden file je všeobecná programátorská technika, ktorá sa týka práve unit-testovania. Naše testy sú často o tom, že porovnávame nejakú aktuálnu hodnotu s očakávanou. No a golden file je technika, keď očakávaná hodnota je uložená v súbore ako text. Validáciu reálnej hodnoty s očakávanou potom robíme diffovaním textu.
Prakticky to vyzerá takto: Máme napríklad funkciu, ktorá vracia štruktúru. Napríklad nám generuje nejaký Pod, čo je dosť košatá štruktúra. Chceme napísať unit-test, ktorý overí, či táto funkcia generuje Pod správne.
Výsledný objekt alebo štruktúru si prevedieme na textový reťazec (môže to byť JSON, YAML alebo čo nám jazyk automaticky dovolí).
Potom očakávanú hodnotu v rovnakom textovom formáte načítame z textového golden súboru.
Nakoniec spravíme diff, ktorý nám buď vráti, že všetko sedí, alebo nám presne ukáže zmenu textu.
Možno sa pýtaš: Načo je to dobré? Je to veľmi jednoduchá a veľmi účinná technika na testovanie kódu, ktorý pracuje s komplexnejšími štruktúrami, a nebaví ťa stále dookola ifovať každý ich parameter. A povedzme si úprimne - ak riešime automatizáciu pre Kubernetes, tak tie štruktúry sú dosť košaté. Takéto testy sú omnoho kratšie a zrozumiteľnejšie.
Ja som túto techniku prvýkrát zaznamenal v kóde samotného Go, kde autori Go takto testujú určité časti. Samozrejme, pre Go už existujú aj veľmi pekné knižnice.
Mne sa osvedčila knižnica Goldie, ktorá pohodlne jedným riadkom zabezpečí túto validáciu. Okrem toho Goldie vie nielen porovnávať, ale aj vytvoriť golden file, respektíve pohodlne zmeniť. Stačí, ak môj unit test spustím ako go test --update.