Přepíšeme testy Nette do PHPUnitu?
- Ondřej Mirtes
- Člen | 1536
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ě 40xF 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
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
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.
- rarous
- Člen | 59
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
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.
- David Grudl
- Nette Core | 8227
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
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
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
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 | 8227
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
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
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
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
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
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
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 | 8227
Můžete se prosím vyhnout tomu, že by testy nepoužívaly framework? Viz https://github.com/…TestCase.php
- jakubkulhan
- Člen | 55
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
ICacheJournal
u. 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
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
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 | 8227
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 | 8227
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.