Git Product home page Git Product logo

pyladies-piskvorky's Introduction

1D piškvorky s testy

Co to je?

Poté, co ses naučila pracovat s řetězci a psát vlastní funkce, dostala jsi za úkol naprogramovat si jednoduchou hru: jednorozměrné piškvorky. Zatím máš předepsané, z jakých dílčích funkcí se bude hra skládat. Toho využijeme a nahlédneme do pokročilejší lekce – té o testování.

Testování ti pomůže ověřit, že tvůj program funguje, jak má. Neboj se však nic, všechno to složitější jsme zatím napsali za tebe. Ty tak můžeš postupovat podle zadání domácích projektů a testy ti spuštěním jednoho jednoduchého příkazu ukážou, jak moc blízko jsi dokončení programu.

Toto je bonusový materiál, který může udělat domácí úkol zajímavější a naučit tě při tom opět něco nového. Pokud máš ale plné ruce práce se zvládání aktuální látky. klidně postupuj jen podle zadání domácích projektů a na testování se společně podíváme později.

Jak na to?

  1. Stáhni si připravený soubor pro [piškvorky] a soubor s testy a ulož je do samostatné složky.

    V souboru test_piskvorky.py máš připravené testy. Nic v něm neměň, ale můžeš se do něj podívat. Samotnou hru pak piš do připraveného souboru piskvorky.py. Máš tam nachystané všechny potřebné funkce, jen zatím nic nedělají. Až je všechny doplníš, budeš mít funkční hru.

  2. Aktivuj si své virtuální prostředí.

  3. Nainstaluj si knihovnu pytest podle návodu v materiálech. Právě ta ti umožní ověřit správnou funkčnost programu.

    (venv) $ pip install pytest
  4. Opět podle návodu pytest spusť.

    (venv) $ pytest -v test_piskvorky.py

Co s tím?

Pytest ti vypíše, kde všude v tvém programu narazil na problém. Tyto jsou podrobně rozepsané a výstup je tak trochu dlouhý. Na jeho začátku však budeš mít takovéto řádky:

test_piskvorky.py::test_vyhodnot_vyhra_x FAILED
test_piskvorky.py::test_vyhodnot_vyhra_o FAILED
test_piskvorky.py::test_vyhodnot_remiza FAILED
…
test_piskvorky.py::test_tah_pocitace_skoro_plne_konec_2 FAILED

Každé FAILED znamená jednu chybu: jeden test, který neprošel. Protože jsi zatím nic nenapsala, je problém úplně ve všem. To se ale změní, jakmile splníš první úkol: zařídíš, aby funkce vyhodnot rozpoznala, že vyhrál hráč s křížky.

test_piskvorky.py::test_vyhodnot_vyhra_o FAILED
test_piskvorky.py::test_vyhodnot_vyhra_x PASSED
test_piskvorky.py::test_vyhodnot_remiza FAILED
…
test_piskvorky.py::test_tah_pocitace_skoro_plne_konec_2 FAILED

Vidíš? Výsledek prvního testu se změnil na PASSED. To znamená, že v tomto případě program funguje, jak má.

Až budeš mít program hotový, místo všech červených FAILED bude u všech testů zelené PASSED. Pak víš, že máš hotovo. Teda, skoro.

test_piskvorky.py::test_vyhodnot_vyhra_x PASSED
test_piskvorky.py::test_vyhodnot_vyhra_o PASSED
…
test_piskvorky.py::test_tah_pocitace_skoro_plne_konec PASSED
test_piskvorky.py::test_tah_pocitace_skoro_plne_konec_2 PASSED

Proč jen skoro? Některé věci testovat moc dobře nejdou, nebo by to bylo pro tebe v tuto chvíli moc složité.

  • Jednou takovou věcí je zadání od uživatele. Funkci tah_hrace proto pytest netestuje. To pak platí i pro celé jádro hry, funkci piskvorky1d, která právě funkci tah_hrace používá, když je hráč na tahu.
  • Druhou věcí, která není testy pokryta, je vypisování na obrazovku. Tedy všechna zvolání o chybách či stavu hry.

Tyto věci musíš ověřit ručně. To by ale nemuselo být tak hrozné: programuješ hru a testováním si rovnou i hraješ.

Co dál?

Snad ti tato zkušenost ukázala, že automatické testování ti může ušetřit čas a práci. Že díky testům si můžeš být jistá, že jsi úpravou programu nerozbila nic, co před tím fungovalo.

Nahlédni do souboru test_piskvorky.py. Možná teď ještě nebudeš rozumět do detailu, jak to všechno vlastně funguje, ale i tak uvidíš, že to není raketová věda. Máš herní pole v nějakém stavu, zavoláš svou funkci, a ověříš, že vrátila to, co by měla.

assert tah("--------------------", 10, "x") == "----------x---------"

Později se naučíš psát si testy sama. Snad ti tenhle malý exkurs ukázal, proč to není zbytečnost a že se ta trocha přidané námahy na začátku skutečně vyplatí.

pyladies-piskvorky's People

Contributors

glutexo avatar frenzymadness avatar

Watchers

James Cloos avatar  avatar  avatar

Forkers

frenzymadness

pyladies-piskvorky's Issues

Odeber testování výjimek

Piškvorky se píší v době, kdy učnice ještě nezdají výjimky. Nemohou se proto ani testovat. Navíc to ani nedává moc smysl:

  • Počítač na chybné pole zahrát nemůže.
  • Hráč dostane možnost při chybném tahu zadat nové pole.

Odeber proto tyto testy a zároveň ověř, že se tah_pocitace testuje dost dobře na to, aby mimo herní pole zahrát nemohl.

Ověř, že se po naprogramování piškvorek testy zazelenají

Testy piškvorek mají být napsané tak, aby selhaly, ale nevyhodily chybu. Při programování výkonného kódu by se měly postupně začít zelenat. Okamžik, kdy se zazelenají všechny, je ten, kdy je bezchybná hra hotová.

Zajisti, aby testy postupně podchycovaly všechny případy ze zadání. Počítají se i případy, které ze zadání vyplývají jen nepřímo.

Počítej s pevnou délkou pole

Přidej konstantu s délkou pole. To bude vždy 20 znaků dlouhé. Díky tomu může být jednodušší nejen kód, ale i testy. Nebudou potřeba testy ověřující, že pole může být i kratší/delší, nebo třeba nulové délky. Odeber následně tyto nadbytečné testy.

Ověř, že lze podle povídání vytvořit prostředí

Podle sepsaného povídání by mělo být možné:

  1. Vytvořit prostředí, ve kterém je pahýl výkonného kódu i soubor s testy.
  2. Lze nainstalovat pytest.
  3. Jde pytestem testy spustit s tím, že všechny budou červené, ale nevyhodí chybu. (F, ne E)

Pamatuj na to, že holky ještě neumějí pracovat s Gitem.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.