Tesztelés az Unison kurzson

Tanuld meg, hogyan teszteld az Unison feladataidat az Exercism-ön


Ismerkedj meg a Unison Codebase Managerrel

A Unison Codebase Manager (UCM) az az eszköz, amely futtatja a Unison programozási nyelvet, és amellyel a megírt és elmentett Unison-kódodban navigálhatsz.

💡 Ne feledd: a Unison-kód nem szöveges fájlokban tárolódik. Épp ezért van szükségünk egy olyan eszközre, amellyel a Unison-programokat módosíthatjuk és futtathatjuk.

Unison-kódot írni annyi, mint megnyitni a választott terminálodat, és a ucm parancsot abban a könyvtárban futtatni, ahol a Unison-kódodat írni fogod. Ezután a kedvenc szövegszerkesztőddel létrehozhatsz vagy megnyithatsz egy .u kiterjesztésű fájlt, például scratch.u vagy hello.u néven. A munkafolyamatod nagy része abból áll majd, hogy a futó ucm parancssori példány és a .u fájlod között váltogatsz. Amint elmented a .u kiterjesztésű fájlodat, a UCM automatikusan felismeri a módosításokat.

A könyvtárszerkezet helyett a Unison-kódbázisokat „névterek” segítségével szervezzük. A base nevű standard könyvtár névterét fogod böngészni hasznos függvények és adattípusok után kutatva, és saját névtereket is létrehozol majd, miközben Unison-kódot írsz. A UCM-ben a kódbázison belüli navigáláshoz az ls és a view parancsot használod: előbbi a névtér tartalmát listázza, utóbbi pedig a forráskódot jeleníti meg.

Bár a kódbázisodban a UCM CLI-n keresztül is navigálhatsz és nézegetheted a kódot, lehet, hogy szeretnéd a munkádat egy szép grafikus nézetben is látni. Ezt úgy teheted meg, hogy kiadod a ui parancsot a UCM CLI-ben. Ez megnyit egy böngészőablakot, amelyben a kódbázisodban lévő kód látható. A helyi kódbázis UI emellett remek módja annak, hogy felfedezd a base nevű standard könyvtárunk függvényeit, amelyek hasznosak lehetnek a feladatok megoldásához. Itt olvashatsz többet a helyi kódbázis UI-ról.

A Unison programozási munkafolyamatát a Unison nyelvi túra segítségével gyakorolhatod.

Az Exercism tesztelési beállítása

Gyors áttekintés

  1. Hozz létre egy új projektet a project.create paranccsal, és add meg a nevét (pl. project.create hello-world)

  2. Miközben a UCM figyeli a feladat könyvtárát, végezd el a módosításaidat a <myFileName>.u fájlban

  3. Mentsd el a <myFileName>.u fájlt

  4. Ha a fájl átmegy a típusellenőrzésen, futtasd az add vagy az update UCM-parancsot

    • Ha a fájl nem megy át a típusellenőrzésen, addig módosítsd a <myFileName>.u fájlban lévő kódot, amíg az le nem fordul
  5. Futtasd a load <myFileName>.test.u parancsot a UCM CLI-ben, hogy a tesztek bekerüljenek a scope-ba, és le is futtasd őket

Részletes végigvezetés

Ha parancssorból dolgozol egy Exercism-feladaton, valószínűleg a megadott feladat nevét viselő könyvtárban fogod megvalósítani a megoldásodat. Például ha a feladat a hello-world, akkor először a cd paranccsal lépj be a ~/exercism/unison/hello-world könyvtárba, majd a parancssorból nyisd meg a ucm-et, és hozz létre benne egy projektet (pl. project.create hello-world). A megvalósításoddal kapcsolatos módosításokat a hello.u fájlban végezd el, és amikor elégedett vagy vele, írd be az add vagy az update parancsot a Unison Codebase Manager CLI-be (UCM), hogy a fájlban lévő munkádat beemeld a kódbázisba.

A teszteket tartalmazó fájl kiterjesztése minden feladatnál .test.u. A UCM load parancsával viheted a teszteket a scope-ba, és futtathatod is őket. A load parancs argumentumként egy fájlútvonalat vár. A hello world feladatnál és a hello-world projektnél ez valahogy így nézhet ki:

hello-world/main> load hello.test.u

A UCM-től egy üzenetet látsz majd azokról a definíciókról, amelyek bekerültek a scope-ba, és ami a legfontosabb, a tesztfuttatás eredményét is látni fogod:


  ⍟ These new definitions are ok to `add`:

    hello.test : Test.Test
    tests      : [Result]

Now evaluating any watch expressions (lines starting with
`>`)... Ctrl+C cancels.


  6 | test> tests = runAll [hello.test]

  🚫 FAILED

Tegyük fel, hogy a tesztjeid nem mentek át elsőre. Válts vissza a myExercise.u fájlod szerkesztésére, és mentés után futtathatod az update-et

I found and typechecked these definitions in ~/Exercism/unison/hello-world/hello.u. If you do an
`add` or `update`, here's how your codebase would change:

  ⍟ These names already exist. You can `update` them to your new definition:

    hello : Text

hello-world/main> update

⍟ I've updated these names to your new definition:

  hello : Text

Ezután újra betölthetjük a tesztjeinket, hogy lássuk, változott-e valami!

hello-world/main> load hello.test.u
  Now evaluating any watch expressions (lines starting with `>`)... Ctrl+C cancels.


  6 | test> tests = runAll [hello.test]

  ✅ Passed : Passed 1 tests.

Hasznos UCM-parancsok

Ha látni szeretnéd a kódbázisoddal való interakcióhoz elérhető parancsok listáját, futtasd a help parancsot a Unison Codebase Manager CLI-ben. A UCM-parancsok listája a weboldalunkon is megtalálható. Íme néhány, amely hasznos lehet:

  • add: A .u fájlban lévő új definíciókat hozzáadja a kódbázishoz.
  • update: Úgy működik, mint az add, azzal a különbséggel, hogy ha egy fájlban lévő definíció neve megegyezik egy már létező definícióéval, akkor a név erre az új definícióra mutat majd.
    • Ha a régi definícióra más definíciók épülnek, az update lehetőség szerint automatikusan továbbítja a változást, vagy létrehoz egy todo elemet a későbbi refaktoráláshoz.
  • load: Elemzi, típusellenőrzi és kiértékeli a megadott .u kiterjesztésű scratch fájlt. Miután megtörtént a típusellenőrzés és a kiértékelés, a definíciókat hozzáadhatod a kódbázisodhoz.
  • ls: Egy névtér tartalmát listázza
  • view: Megjeleníti egy adott Unison-definíció forráskódját
  • ui: Megnyitja a helyi kódbázis UI-t
  • exit: Bezárja a UCM-et