text: Implementace a testy na jednom místě? | devel.cz
  Implementace a testy na jednom místě? rubrika: Programování: Jiné
  položil/-a 12.3.2017
  Ahoj, máte unit testy ve stejné složce společně s třídami, které testujete, nebo máte implementace v nějaké složce src/ a testy v složce tests/?
  A co integrační testy a akceptační testy?
  Máme projekt v Symfony, testy PHP tříd úplně oddělené od zdrojových kódů a zajímalo by mě, zdali není v něčem lepší mít implementaci a testy na jednom místě. Prošel si někdo oběma způsoby, že by byl schopný posoudit výhody/nevýhody (údržba, spouštění, cokoliv)? Díky!
  12 ivoszz
  Držel bych se toho, co je pro daný jazyk/framework idiomatické a pro co má podporu.
  V node.js jsem měl testy oddělené a připadalo mi to tak nejlepší, ještě jsem to dále dělil na unittesty a integrační. Když jsem ale začal psát frontend v reactu, tak jsem narazil a u react komponent jsem postupně přešel na testy přímo u jednotlivých komponent. Nepíšu je ale v tom jejich jestu. Teď píši převážně v Go a tam jsou automaticky testy přímo ve stejné složce/baliku.
  Pokud se projekt skládá z mnoha dílčích modulů/balíků, měly by být testy součástí daných modulů (kvůli snadné přenositelnosti do dalších projektů) a je podle mne jedno, jestli jsou přímo ve stejné složce nebo v nějaké vyhrazeném podadresáři. Pokud je to jeden megaprojekt, který není moc členěný, klidně mohou pak být testy úplně separé. Rozhodující je podpora toolingu ze strany daného jazyka nebo frameworku.
  Pokud to vezmu prakticky, společný kód a testy mají v go třeba tu výhodu, že při ukládání souboru se nad daným souborem automaticky provedou testy (testy jsou uloženy v souboru jmeno_test.go) a určí se pokrytí, které se vzápětí zobrazí v editoru. A já hned vidím jak to dopadlo. Je to samozřejmě podmíněno tím, že kompilace a linkování v go je extrémně rychlé. Pokud nějaký test přece jen trvá déle, můžu ho prohlásit za dlouhý, který se při těchto akcích nevykonává. Stejně tak otaguji integrační/funkční testy a ty se provádějí třeba jen při CI nebo když si to explicitně vyžádám. Díky tomu už dnes preferuji testy ve společné složce.