Přepíšeme testy Nette do PHPUnitu?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ondřej Mirtes
Člen | 1536
+
0
-

Ahoj,
ještě nikdy jsem neviděl žádného přispěvatele do repozitáře Nette napsat na svoji novou funkcionalitu test a myslím si, že ani po přepsání nějakého existujícího kódu nezkontroloval kompatibilitu spuštěním Davidových testů.

Hlavní překážka podle mě tkví v tom, že Nette nemá testy ve standardním PHPUnitu, ale v nějaké šílenosti, kterou si David bůhví proč sám naimplementoval. Podařilo se mi je po přepsání několika nastavení spustit a vyběhlo na mě 40×F s hláškou „Output doesn't match.“, ze které se nic nedozvím.

Podle mě tahle záležitost také dost brzdí vývoj frameworku, protože ten testovací bastl je hrozně nepřehledný a jak lze vidět výše, z chybové hlášky se člověk nic nedozví, musel by jít do toho konkrétního testu a dumpovat si proměnné.

Rozhodl jsem se s tím tedy něco dělat a založil jsem ve svém forku větev phpunit. Vytvořil jsem tam testovací bootstrap.php, phpunit.xml a TestCase odvozený od PHPUnit_Framework_Testcase, do kterého jsem přidal funkcionalitu Nette\Object. Všechno to má pár řádků, je to snadné na pochopení a neprobíhá tam žádná magie.

A na ukázku jsem přepsal Html.basic.phpt do syntaxe PHPUnitu.

D:\Weby\www\Nette\nettePHPUnit\tests>phpunit .
PHPUnit 3.4.11 by Sebastian Bergmann.

.........

Time: 0 seconds, Memory: 6.25Mb

←[30;42m←[2KOK (9 tests, 19 assertions)

A teď malé wow :)

D:\Weby\www\Nette\nettePHPUnit\tests>phpunit --testdox .
PHPUnit 3.4.11 by Sebastian Bergmann.

Nette\Web\Html
 [x] Basic tag behaviour
 [x] Single tag can not have text
 [x] Single tag in html doctype
 [x] Overwrite attributes
 [x] Convert into different tag
 [x] Set text versus set html
 [x] Get text versus get html
 [x] Obfuscate email
 [x] Href with get parameters

S tímhle pohodlím se nemůže Nette\Test vůbec srovnávat.

Otázka zní: Kdo do toho jde se mnou a přepíše všechny testy Nette do PHPUnitu?

Patrik Votoček
Člen | 2221
+
0
-

Já vyděl akorát sebe… Když jsem to dělal poprvé
Jinak přiznávám že nette testy jsou mě víc než překážkou… Naposledy když jsem se je pokoušel spustit shodilo mě to celé PHPko… A to nemluvím o klucích kteří se o to pokoušely na Linuxu… Já jsem jednoznačně pro přepsání do PHPUnitu možná bych se ani nebál PHPUnitu 3.5 který už je v RC verzi. Nicméně pořád s testy celkem bojuju protože prostě nedokážu pochopil mockování. Navíc mám spoustu práce s dokumentací… O normální práci raději nemluvím… Takže přeju hodně štěstí a když bude trocha času rád pomůžu.

Panda
Člen | 569
+
0
-

No já taky viděl test psát akorát sebe… Už jsem zvažoval, že bych Nette testy přepsal do PHPUnitu, nicméně začal jsem si s ním hrát teprve nedávno a testovat se teprve učím. Pokud by se našla nějaká hodná duše, která by pak případně na mé testy hodila očko, tak bych klidně přidal ruku k dílu.

paranoiq
Člen | 392
+
0
-

proti

testům v Nette chybí pouze nějaká základní dokumentace (howto). k tomu co mají na starosti postačují

Editoval paranoiq (18. 8. 2010 13:19)

rarous
Člen | 59
+
0
-

Myslím, že je to dobrý nápad. Na moji přednášku na WebExpu jsem chystal demo, kde jsem chtěl ukázat, jak je snadné rozjet continuous integration třeba na Nette a zjistil jsem, že to je prakticky nemožné. :)

PHPUnit generuje výstup, kterému rozumí CI servery (JUnit compatible). Kdyby se vám podařilo do září testy překlopit, rád bych tohle demo zařadil zpět. :)

Ondřej Mirtes
Člen | 1536
+
0
-

VrtakCZ: PHPUnit 3.5.0 mě lákal, ale nedařilo se mi ho zprovoznit. Už ho ale mám a píšu testy pro něj :)

Panda: Myslím si, že zrovna v tomhle případě to nebude žádná věda, nebude tam potřeba nic vymýšlet, jen prostě ty „asserty“ převést 1:1 do PHPUnitu a seskupit do výmluvně nazvaných metod, jako se o to snažím u Nette\Web\Html. Akorát bych chtěl minimalizovat práci se soubory (složky expected a output jsou tam snad všude), protože mi to po zevrubném prozkoumání přijde ve spoustě případů zbytečné.

rarous: CI nástroj by měl zkoumat code coverage tvých zdrojáků (konkrétní aplikace), zdrojáky frameworku mu můžou být ukradené, ne? A tvé zdrojáky můžeš klidně testovat v PHPUnitu.

paranoiq: Jasně, že pro Davida to stačí a sám ví, jak to má zprovoznit. Já se na to koukám z pohledu komunity, kdy už jen zprovoznit ty testy je problém a u těch 40 F nemám zdání, jestli jde o Davidovy todočka nebo jsem zapomněl ještě někde něco nastavit.

Nyní člověk nemůže napsat ani test reprodukující chybu, kterou chce na GitHubu popsat.

Já se do toho přepisování pustím, sám to ocením (narozdíl třeba od dokumentace, kterou nepotřebuju :)) a pro budoucnost frameworku je to taktéž důležité. Klidně se kdokoli připojte – můžete si forknout moje repo na GitHubu nebo si jen lokálně přidat moje repo jako remote a říct si o práva pro přispívání, abyste tam mohli pushovat změny.

rarous
Člen | 59
+
0
-

Já ale chci rozjet CI build Nette, ne něčeho v Nette napsaného. S PHP se kvůli tomu prát nechci. :)

Editoval rarous (18. 8. 2010 16:30)

David Grudl
Nette Core | 8111
+
0
-

Používám ten bastl protože test napíšu mnohem rychleji a velice snadno jej mohu debugovat. V době, kdy Nette používalo PHPUnit, jsem se musel do psaní testů nutit, byla to práce navíc. Proto jsem jej nahradil tou nějakou šíleností. Jestli máte problém zprovoznit testy jinde, tak je prosím upravte (jako to třeba už kdysi udělal Kravčo), jak mám vědět že to jinde neběží?

Nebráním se používání PHPUnit. Ale chce to připravit nějaký „test skeleton“ nebo „test scaffolding“, aby byli programátoři schopni snadno a rychle tvořit testy odpovídající nějakému coding style. A samozřejmě převést všechny existující testy.

jantichy
Člen | 24
+
0
-

Davide, hlavní problém myslím není v tom, že to jinde neběží, ale že se nikdo nechce učit používat nějaký další proprietární testovací framework, když prakticky všichni znají a používají de facto standardní PHPUnit. Rozumím tomu, že Tobě se s Tvým vlastním testovacím rozhraním asi pracuje dobře, ale já v tom vidím další bolestivý, ale nevyhnutelný krok v rámci puštění Nette ven do světa…

Ondřej Mirtes
Člen | 1536
+
0
-

S Pandou jsme se do přepisování už pustili, předpokládám, že za pár dnů to bude hotové.

Davide, nechtěl jsem tě nijak urazit, jen vycházím z toho, že podobné projekty (např. Zend nebo Doctrine) žádné podobné vlastní řešení nepotřebují a že PHPUnit je standard, kterého bychom se měli držet. V Nette\Test se nevyznám, je tam oddělený testovací kód a výstup těch dumpů, takže si musím vždy odpočítat, který očekávaný řádek se váže k jakému dumpu. A další záležitosti, jako např. neurčitá zpráva o jiném stringu, než byl ten očekávaný, možnost generování code coverage a další spousta fíčur (např. možnost prošlým testem uzavírat issues na GitHubu :)). Okolo PHPUnit vyrostl pěkný ekosystém a je škoda ho nevyužít.

Dodržení coding style není problém, určitě to bude přehlednější, než teď. Stávající systém umožňuje dvě varianty kontroly – statickými metodami třídy Assert anebo dumpem a vypsáním očekávaného stringu v bloku --EXPECTED--. Naprosto jednotná podoba se dá pak zařídit sepsáním best practices PHPUnitu.

Co bych dal jako předmět k diskuzi:

  • Původní testy obsahovaly samostatný php.ini. Tomuto bych se vyhnul, čím víc konfigurací, na kterých testy proběhnou, tím lépe odhalíme více potenciálních problémů. Např. už teď vím, že na mé konfiguraci neprochází test s expirací jednotlivého klíče v session a bude to chtít nějak řešit.
paranoiq
Člen | 392
+
0
-

Davide, chceš ty vlastně pustit Nette do světa? protože pokud ano, možná se budeš muset podřídit „standardům“

tedy, můj názor je takový: když jsem se učil s PHPUnit, bylo to pomalé a bolestivé. stačí abych si přečetl třeba popis metody assertThat() a orosí se mi čelo. nedej bože, abych po někom musel luštit testy, kde se to opravdu použije. PHPUnit nemám rád – je zbytečně komplikovaný. mám rád jednoduché věci. NetteTest jsem pochopil a zprovoznil za dvě hodiny. některé „standardy“ prostě stojí za prd

UPDATE: samozřejmě výstup toho bastlu by šel určitě značně vylepšit

Editoval paranoiq (18. 8. 2010 22:38)

David Grudl
Nette Core | 8111
+
0
-

jantichy napsal(a):

…ale že se nikdo nechce učit používat nějaký další proprietární testovací framework…

Ano, právě proto jsem už jednou PHPUnit nasadil a nebráním se tomu jej nasadit znovu, ačkoliv mám k němu velké výhrady.

Ondřej Mirtes napsal(a):

S Pandou jsme se do přepisování už pustili, předpokládám, že za pár dnů to bude hotové.

Super!

Davide, nechtěl jsem tě nijak urazit, jen vycházím z toho, že podobné projekty (např. Zend nebo Doctrine) žádné podobné vlastní řešení nepotřebují a že PHPUnit je standard, kterého bychom se měli držet.

Proč dělat Nette, když je tu standard v podobě Zend Frameworku? ;)

PHPUnit mi jednoduše nevyhovuje. Především je nesmírně ukecaný. Je nesrovnatelně snadnější hodnotu dumpnout, než ji deseti voláními $this->assertXYZ zkoumat. Případný rozdíl v dumpech dokáže navíc odhalit nesrovnalosti, kterých bych si pomocí assertů nemusel všimnout. To byly důvody použít jiný testovací nástroj.

Nette\Test je samozřejmě ve fázi prvotního nástřelu a tedy velmi nedokonalý. Ale proč z něj hned dělat bastl? Asserty zvládá bez nutnosti vytvářet třídy + metody a všude psát $this->, také v případě chyby vypíše srozumitelné Failed asserting that '...' is not identical to 'John Doe' in file tests\Reflection\Annotations.phpt on line 42. Code coverage generuje dle mého slušný (klikni na jméno souboru), pravda, netuším jaký code coverage leze z PHPUnit. Uzavírat prošlým testem issues na GitHubu jsem nepotřeboval. Dumpování + odpočítávání řádek nebo neučité zprávy jsou samozřejmě pakárny. Prostě jen čekají na vyřešení. Vyřešeno.

Nicméně nemám čas ani chuť se pouštět do vývoje dalšího testovacího systému, takže PHPUnit akceptuju s těžkým srdcem.

paranoiq napsal(a):

100% souhlas

jakubkulhan
Člen | 55
+
0
-

Zkusil jsem přepsat testy Nette\Caching v rámci snahy naučit se PHPUnitem (https://github.com/…d5e655608303). Narazil jsem u testů s konstantou (https://github.com/…nst.001.phpt, https://github.com/…nst.002.phpt) a @serializationVersion (https://github.com/…ion.001.phpt, https://github.com/…ion.002.phpt), protože by se musely předefinovávat konstanty/třídy za runtime PHPUnitu.

Ondřej Mirtes
Člen | 1536
+
0
-

Ukecanost PHPUnitu: Sebastian Bergmann před pár dny ublognul, že přidal globální funkce assert*, aby lidi nemuseli psát $this->. Komunita se v komentářích ale vzbouřila a tak to odstranil s doporučením, že kdo chce, může si do svého „BaseTestCase“ dát zkratky jako $this->ae, $this->at apod.

jakubkulhan: Díky za přispění, akorát z toho nebude mít radost Panda, který se prý do Nette\Caching taky pustil :o) Pokud to budeme dělat ve víc lidech, musíme se domluvit, abychom nedělali paralelně to samé.

Panda
Člen | 569
+
0
-

No to nebude. :-)

Na Jakubovy testy pak kouknu a zmerguji je s těmi svými (určitě si půjčím minimálně myšlenku data providerů, ta mě nanapadla). Své testy pojal trochu jinak – mám jednu abstraktní testovací třídu pro všechny implementace ICacheStorage (teda kromě DummyStorage, tam je naopak potřeba, aby cache vůbec nefungovala), kterou pak podědím pro všechny implementace. Jedním kódem tak komplexně otestuji všechna dostupná úložiště, což je dle mého soudu docela výhodné.

Na zmíněné dva testy jsem taky narazil a popravdě byly jediným důvodem, proč jsem své testy necommitoval již včera – izolace procesů mi zatím z neznámého důvodu háže chybu v neznámém souboru na řádce 159, takže se v tom dnes budu muset trochu pohrabat a najít onen soubor s pekelným řádkem 159.

jakubkulhan
Člen | 55
+
0
-

Panda napsal(a):

No to nebude. :-)

Na Jakubovy testy pak kouknu a zmerguji je s těmi svými (určitě si půjčím minimálně myšlenku data providerů, ta mě nanapadla). Své testy pojal trochu jinak – mám jednu abstraktní testovací třídu pro všechny implementace ICacheStorage (teda kromě DummyStorage, tam je naopak potřeba, aby cache vůbec nefungovala), kterou pak podědím pro všechny implementace. Jedním kódem tak komplexně otestuji všechna dostupná úložiště, což je dle mého soudu docela výhodné.

Na zmíněné dva testy jsem taky narazil a popravdě byly jediným důvodem, proč jsem své testy necommitoval již včera – izolace procesů mi zatím z neznámého důvodu háže chybu v neznámém souboru na řádce 159, takže se v tom dnes budu muset trochu pohrabat a najít onen soubor s pekelným řádkem 159.

Tvůj způsob vypadá lépe. Já jsem se nesnažil vymýšlet nic dalšího, jen jsem testy v NetteTest, prakticky 1:1, přepsal do PHPUnitu.

K té izolaci procesů – obávám se, že to nepomůže. Mně na Linuxu PHPUnit 3.5.0RC1, pokud ho spustím s volbou --process-isolation, volá setUpBeforeClass pro každý test v testcase.

Panda
Člen | 569
+
0
-

Tak už se mi to povedlo zrealizovat. Řešením je nastavit @runInSeparateProcess, vypnout ukládání globálního stavu a ručně si includovat bootstrap.php, protože PHPUnit si cestu k němu předává právě v globální proměnné (kterou neukládám):

if (function_exists('__phpunit_run_isolated_test')) {
	require_once __DIR__ . '/../bootstrap.php';
}

Teď to trochu sloučím s Tvým řešením a pak commitnu.

Ondřej Mirtes
Člen | 1536
+
0
-

Zprovoznil jsem si Memcache a testy k MemcachedStorage (od Jakuba) nefungovaly, tak jsem to opravil.

Pak jsem ještě řešil testy k Session, bylo to trochu rozbité. S PHPUnitem je ta potíž, že pokud zahájí výstup (./F/E na příkazovou řádku), nelze pak už posílat hlavičky. Čisté řešení je samozřejmě to, že v testech se třídě podstrčí DummyAdapter, který sessions ve skutečnosti neposílá do prohlížeče, ale jen si je ukládá k sobě. Tohle řešení bohužel Nette nepodporuje. Tahle chyba se ovšem přestane projevovat, pokud PHPUnit pošlu na chybový výstup – to se dá zařídit úpravou PHPUnit/TextUI/TestRunner.php – na řádce 212 je potřeba NULL zaměnit za 'php://stderr'. V Mediu jsme se bez toho také bohužel neobešli.

Taky se mi nelíbilo, jak testy příliš pracovali s třídou Environment. To bychom měli co nejvíc omezit, globální proměnné jsou zlo a v testech to platí dvojnásob. V nich jsem to tedy úplně vyházel (a vytvořil jednu složku temp, do které všechny testy, které ji potřebují, odkazují) a kvůli CacheJournal, který si do Environment sahá pro tempDir, přidal do bootstrapu konstantu APP_DIR.

Pando, až to budeš mergovat, promítni si k sobě tyhle změny, díky.

David Grudl
Nette Core | 8111
+
0
-

Můžete se prosím vyhnout tomu, že by testy nepoužívaly framework? Viz https://github.com/…TestCase.php

Panda
Člen | 569
+
0
-

Tak by to snad mohlo být mergnuto. Zkuste prosím někdo spustit testy pro APC, mě z neznámého důvodu poškodí databázi ICacheJournalu. A přitom je to skoro stejný kód, jako používá MemcachedStorage

jakubkulhan
Člen | 55
+
0
-

Panda napsal(a):

Tak by to snad mohlo být mergnuto. Zkuste prosím někdo spustit testy pro APC, mě z neznámého důvodu poškodí databázi ICacheJournalu. A přitom je to skoro stejný kód, jako používá MemcachedStorage

U mě v pořádku (PHP 5.3.2, APC 3.1.3p1, Linux), APC databázi nepoškodí – jediný problém je ten popsaný tady, protože testy zapisují do APC moc rychle za sebou.

Ondřej Mirtes
Člen | 1536
+
0
-

David: Dal jsem to tam s dobrým úmyslem (hezčí hlášky v případě překlepu apod.), ale uznávám, že když se jedná o samotný testovaný kód, že by to tam být nemělo.

Doufám, že to neplatí pro includnutí loader.php v bootstrapu, to se naopak hodí velice (člověk si ušetří spoustu require_once) a otestuju tím maximálně to, že ve frameworku není Parse/Fatal Error.

Jakub: Pullnul jsem k sobě tu opravu MemcacheStorage testu, vytvoření temp složky jsem vyřešil vytvořením prázdného .gitignore souboru (známý workaround).

Panda a Jakub: APC testy mi pořád failují. Nerozumím tomu, možná je problém ve špatné konfiguraci, jediné, co jsem udělal, byla instalace balíčku php-apc (Ubuntu).

phpunit Caching/ApcStorageTest.php
PHPUnit 3.5.0RC1 by Sebastian Bergmann.

SSS.FFFFFFFFFFFFFFF.F.FFFFFSSS

Time: 3 seconds, Memory: 10.25Mb

There were 21 failures:

1) Nette\Caching\ApcStorageTest::testWrite with data set #0 ('nette', 'rulez')
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:132

2) Nette\Caching\ApcStorageTest::testWrite with data set #1 ('../'...)
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:132

3) Nette\Caching\ApcStorageTest::testWrite with data set #2 (3840...)
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:132

4) Nette\Caching\ApcStorageTest::testWriteClosure with data set #0 ('nette', 'rulez')
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:145

5) Nette\Caching\ApcStorageTest::testWriteCallback with data set #0 ('nette', 'rulez')
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:159

6) Nette\Caching\ApcStorageTest::testRemoveUsingUnset with data set #0 ('nette', 'rulez')
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:132
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:169

7) Nette\Caching\ApcStorageTest::testRemoveUsingUnset with data set #1 ('../'...)
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:132
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:169

8) Nette\Caching\ApcStorageTest::testRemoveUsingUnset with data set #2 (3840...)
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:132
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:169

9) Nette\Caching\ApcStorageTest::testRemoveUsingNull with data set #0 ('nette', 'rulez')
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:132
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:181

10) Nette\Caching\ApcStorageTest::testRemoveUsingNull with data set #1 ('../'...)
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:132
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:181

11) Nette\Caching\ApcStorageTest::testRemoveUsingNull with data set #2 (3840...)
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:132
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:181

12) Nette\Caching\ApcStorageTest::testRemoveUsingCallback with data set #0 ('nette', 'rulez')
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:132
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:193

13) Nette\Caching\ApcStorageTest::testRemoveUsingCallback with data set #1 ('../'...)
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:132
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:193

14) Nette\Caching\ApcStorageTest::testRemoveUsingCallback with data set #2 (3840...))
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:132
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:193

15) Nette\Caching\ApcStorageTest::testNamespaces
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:212

16) Nette\Caching\ApcStorageTest::testCallbackDependencyTrue with data set #0 ('nette', 'rulez')
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:264

17) Nette\Caching\ApcStorageTest::testExpiration with data set #0 ('nette', 'rulez')
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:290

18) Nette\Caching\ApcStorageTest::testSlidingExpiration with data set #0 ('nette', 'rulez')
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:309

19) Nette\Caching\ApcStorageTest::testFileDependency with data set #0 ('nette', 'rulez')
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:361

20) Nette\Caching\ApcStorageTest::testPriority
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:393

21) Nette\Caching\ApcStorageTest::testTags
Failed asserting that <boolean:false> is true.

/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:69
/home/www/3rdParty/netteMy/tests/Caching/CacheStorageTest.php:411

FAILURES!
Tests: 27, Assertions: 67, Failures: 21, Skipped: 6.

Nastavení APC:

php -r 'phpinfo();' | grep apc
Additional .ini files parsed => /etc/php5/cli/conf.d/apc.ini,
apc
apc.cache_by_default => On => On
apc.canonicalize => On => On
apc.coredump_unmap => Off => Off
apc.enable_cli => Off => Off
apc.enabled => On => On
apc.file_md5 => Off => Off
apc.file_update_protection => 2 => 2
apc.filters => no value => no value
apc.gc_ttl => 3600 => 3600
apc.include_once_override => Off => Off
apc.lazy_classes => Off => Off
apc.lazy_functions => Off => Off
apc.max_file_size => 1M => 1M
apc.mmap_file_mask => no value => no value
apc.num_files_hint => 1000 => 1000
apc.preload_path => no value => no value
apc.report_autofilter => Off => Off
apc.rfc1867 => Off => Off
apc.rfc1867_freq => 0 => 0
apc.rfc1867_name => APC_UPLOAD_PROGRESS => APC_UPLOAD_PROGRESS
apc.rfc1867_prefix => upload_ => upload_
apc.rfc1867_ttl => 3600 => 3600
apc.shm_segments => 1 => 1
apc.shm_size => 30 => 30
apc.stat => On => On
apc.stat_ctime => Off => Off
apc.ttl => 0 => 0
apc.use_request_time => On => On
apc.user_entries_hint => 4096 => 4096
apc.user_ttl => 0 => 0
apc.write_lock => On => On
jakubkulhan
Člen | 55
+
0
-

Ondřej Mirtes napsal(a):

vytvoření temp složky jsem vyřešil vytvořením prázdného .gitignore souboru (známý workaround).

V tom případě by to ještě chtělo upravit \TestCase::truncateDirectory(), aby nemazala .gitignore.

apc.enable_cli => Off => Off

Mělo by pomoci apc.enable_cli v php.ini změnit na On. Jinak fix pro správnou detekci, jestli je APC dostupné: https://github.com/…846c50e3aae2 (což by mělo všechny testy APC skipnout, není-li dostupné /možná by nebylo od věci dát radu ohledně apc.enable_cli i do skipped hlášky v ApcStorageTest::setUp()/).

Editoval jakubkulhan (19. 8. 2010 23:55)

David Grudl
Nette Core | 8111
+
0
-

Pokusil jsem se ve většině případů převést v Nette\Test dumpy na asserty. Třeba vám to nějak pomůže při konverzi do PHPUnit.

David Grudl
Nette Core | 8111
+
0
-

ps. používáte někdo APC? Jelikož to neumí spolehlivě mazat a ukládat položky (je potřeba dodržovat sekundový interval) spíš bych to z Nette vyhodil.

Majkl578
Moderator | 1364
+
0
-

Já APC používal, ale bylo s ním víc problémů než užitku. Teď ho používám jen jako opcode cache, na cache dat používám Memcache.

Panda
Člen | 569
+
0
-

Já osobně jsem po hrátkách s testy také pro odstranění z frameworku, respektive pro přeřazení do extras a připojení nálepky „Use only at your own risk! You have been warned…“.

Panda
Člen | 569
+
0
-

Poslušně hlásím, že jsem začal přepisovat testy pro Nette\Config.