abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 22:33 | Nová verze

    Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.

    Ladislav Hagara | Komentářů: 0
    včera 17:44 | Zajímavý článek

    Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.

    karkar | Komentářů: 0
    včera 12:11 | Humor

    Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).

    Ladislav Hagara | Komentářů: 2
    včera 10:44 | IT novinky

    Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.

    Ladislav Hagara | Komentářů: 23
    včera 09:55 | IT novinky

    Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.

    Ladislav Hagara | Komentářů: 2
    včera 09:33 | IT novinky

    Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.

    Ladislav Hagara | Komentářů: 0
    včera 08:11 | Nová verze

    Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    29.4. 20:55 | Nová verze

    Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.

    Ladislav Hagara | Komentářů: 0
    29.4. 16:22 | Nová verze

    Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    29.4. 15:55 | Pozvánky

    Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových

    … více »
    Zdenek H. | Komentářů: 2
    Jaký filesystém primárně používáte?
     (58%)
     (1%)
     (9%)
     (21%)
     (4%)
     (1%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 495 hlasů
     Komentářů: 19, poslední včera 11:32
    Rozcestník

    Jednotkové testy času

    27.8.2009 08:43 | programování | poslední úprava: 27.8.2009 09:07

    S časem je v jednotkových testech maličko problém. (Co když chci otestovat například funkci, která parsuje data s ohledem na aktuální datum?) V dynamičtějších jazycích se to naštěstí dá vyřešit snadno:

    use Test::More 'no_plan';
    use Test::MockTime 'set_absolute_time';
    set_absolute_time('27/08/2009', '%d/%m/%Y');
    # A jedeme.
    
    Základ Test::MockTime je přitom jednoduchý:
    BEGIN {
    	*CORE::GLOBAL::time = \&Test::MockTime::time;
    	*CORE::GLOBAL::localtime = \&Test::MockTime::localtime;
    	*CORE::GLOBAL::gmtime = \&Test::MockTime::gmtime;
    }
    
           

    Hodnocení: 17 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    27.8.2009 13:02 Tomáš
    Rozbalit Rozbalit vše Re: Jednotkové testy času
    Nebylo by lepší používat anglický název unittest? Programátorům to řekne víc.

    K tomu času: pokud se to nedá jednoduše oblafnout, tak to bych to řešil tak, že hodnotu zkontroluji jenom jestli tam něco je a nechám to být. Případně v testu se někdy dá načíst stejná hodnota nezávisle, a pak se dá porovnat. Má to výhodu, že člověk zjistí, co mu tam vlastně chodí (ono se to liší podle platformy a člověk pak nevěřícně kouká, co to tam je za blbost).
    zoul avatar 27.8.2009 13:51 zoul | skóre: 43 | blog: | Boskovice
    Rozbalit Rozbalit vše Re: Jednotkové testy času
    Když je k dispozici pěkný český překlad, dávám mu přednost. Jednak se většinou líp skloňuje a jednak výsledný text nevypadá jako výstup z automatického překladače :) Kontrolovat jen jestli funkce vůbec něco vrací je blbý, protože alespoň v tom mém případě je podrobná kontrola parsovaného data hlavní pointa testu. Nezávislé načtení hodnoty (tj. nějaké testovací rozhraní nezávislé na zbytku systému, globálním stavu) je samozřejmě ideální, to se shodneme. Přesně to ale v podstatě dělá právě Test::MockTime.
    Marek Bernát avatar 27.8.2009 20:52 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Jednotkové testy času

    Sorry, že si musím zasa rýpnuť, ale mne to práve ako z automatického prekladača pripadá. Vždy som unit testy bral tak, že slovo unit tam znamená najmenšia časť kódu, ktorá robí niečo užitočné v danom kontexte. Takže "testovanie častí" je podľa mňa oveľa lepší preklad. Jednotkový test znie skôr ako keby tam išlo o nejakú jednotku v zmysle čísla, alebo o fyzikálne jednotky. Málokto si slovo jednotka predstaví ako časť celku.

    A btw, ten tvoj problém som absolútne nepochopil, zbytočne v blogu šetríš slovami. Mohol by si to vysvetliť trochu lepšie, že čo sa snažíš dosiahnuť, a prečo by to v iných jazykoch nefungovalo?

    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    zoul avatar 27.8.2009 22:01 zoul | skóre: 43 | blog: | Boskovice
    Rozbalit Rozbalit vše Re: Jednotkové testy času
    (1) Jde o zavedený překlad, to jsem si nevymyslel. (2) „Unit“ se jako „jednotka“ překládá i v jiných kontextech, takže je to dobré dodržet i tady. (3) Výraz „jednotka“ mi jako označení základních stavebních bloků nepřipadne zlý. „Testování částí“ by klidně mohlo být testování složitejších částí systému, například autentizačního systému a podobně. Ve výrazu „unit“ jde právě o tu nedělitelnost.

    V blogu šetřím, protože ho používám především jako poznámkový blok. Na víc nemám čas ani ambice. Pokud se někdo s problémem času v jednotkových testech setkal, bude vědět, o čem mluvím, takže článek přeci jen není pouze pro mě. (Doufám.)

    Jeden ze základních problémů jednotkových testů je izolace testovaných komponent od zbytku systému. Pokud se kus kódu nedá rozumně izolovat, nedá se rozumně testovat. Ideální je, když může člověk testovanou komponentu samostatně zapojit v „laboratorním“ prostředí, kde má všechny vstupy pod kontrolou. Test je pak deterministický a jednoduchý. Pokud komponenta pracuje s reálným časem, závisí na nějakém globálním stavu systému, a tahle závislost komplikuje testování.

    Jedna možnost, jak tuhle závislost vyřešit, je připsat testovací rozhraní. Nějakou „diagnostickou konzoli“, která umožní nahradit reálný čas laboratorním časem, na kterém se dají dobře odzkoušet všechny hraniční případy. Pokud tomu dobře rozumím, ve statických jazycích se to často řeší pomocí inversion of control. Pokud je jazyk dynamičtější, nabízí se jednodušší řešení, kterému se říká monkey patching – člověk prostě nahradí část testovaného kódu nebo runtimu svým vlastním kódem, který poslouží jako potřebné testovací rozhraní.

    V postu jsem chtěl především upozornit na šikovný perlový modul, který umožňuje v testech nafixlovat reálný čas. Pokud někdo pracuje v Perlu a potřebuje testovat nějaký kód, který si hraje s časem, možná mu přijde vhod. Na ukázce zdrojáku je pak vidět, jak jednoduše se dá takový monkey patching provést.
    Marek Bernát avatar 28.8.2009 00:44 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Jednotkové testy času

    Ok, to znie vcelku rozumne. Ale ja, ak dovolíš, sa budem držať názvu unit test :-)

    Jj, viem presne o čo ide v unit testoch, len som nepochopil ten tvoj problém kvôli tomu, že sám už pracujem prakticky výlučne v dynamických jazykoch a tam je to, ako hovoríš, triviálne, takže ani nemá cenu to rozoberať :-) A ešte jednoduchšie je to, ak človek pracuje vždy s REPLom a len si naťahuje skompilovaný kód (bežná práca s Lispom cez SLIME), a ešte oveľa viac v Squeaku, kde nič ako program ani neexistuje, ale všetok kód stále beží -- to je tá tvoja diagnostická konzola, len dotiahnutá ešte oveľa ďalej.

    V statických jazykoch je to holt ťažké a človek si bez nejakých nadbytočných hookov a patternov asi neporadí. Samozrejme, záleží od toho, v ktorých statických jazykoch. Napríklad taký Haskell je čisto funkcionálny, takže pojem stav neexistuje a stačí kontrolovať len vstupy/výstupy každej funkcie -> ideálna situácia pre testera :-)

     

    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    default avatar 29.8.2009 16:08 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Jednotkové testy času

    Já tohle řešil. Při analýze jsem vycházel ze zkušeností se špatně napsanou aplikací. Ta aplikace má totiž rozdělenou business logiku. Jedna část je v Javě a druhá — na jiném stroji — v databázi. Aplikace zahazuje čas; ukládá jen datum. To se jeví jako elegantní obejití problému s vyhledáváním (netřeba porovnávat na rozsahy). Co už ale hoši nedomysleli, je způsob práce této aplikace. Ta totiž největší práci dělá přes noc. A v noci se děje co? No láme se datum. :-D

    Takže já ve svých komponentách zavedl pojem business date. Naprogramovat pro to provider je triviální. Na první pohled si člověk řekne, co že to je za hovadinu: obalovat SYSDATE. Ale těch providerů může být několik. Jeden vytáhne datum z aplikáče, druhý z databáze, třetí odněkud odjinud. Navíc to business date je konstantní pro všechny komponenty po celou doby noční dávky.

    Ale ta hlavní výhoda spočívá právě v těch tvých jednotkových testech času (mimochodem — až z diskuze jsem pochopil, co ten termín skutečně znamená). Prostě napíšu Mock Provider, kterej to datum tahá z konfiguráku. :-D Klidně si ten Mock objekt můžeš předat pomocí IoC. :-D

    Osobně si troufám tvrdit, že když nějaký proces potřebuje ke své činnosti datum, pak to datum má být parametrem. Takže je to spíš takový workaround na špatně navrženou (naimplementovanou) aplikaci.

    Ale jinak je to všechno v pořádku. Občas potřebuješ otestovat něco, co prostě není úplně ready. Jako to tady děláme my pořád dokolečka s tou aplikací, kterou jsem popsal v úvodu. A jako že je to zábava udržovat testovací datum na několika strojích, když by stačil konfigurák. :-D

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.