Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Nette Tester / Posobota
Search
Filip Procházka
April 28, 2013
Technology
0
200
Nette Tester / Posobota
Filip Procházka
April 28, 2013
Tweet
Share
More Decks by Filip Procházka
See All by Filip Procházka
Evolving architecture
fprochazka
0
180
Value objects in PHP
fprochazka
1
190
Jak psát testy na REST API
fprochazka
0
94
V gitu se nic neztratí
fprochazka
0
370
Co se PHP programátor může naučit od Javy?
fprochazka
1
120
4 roky remote
fprochazka
1
79
Před čím tě Nette ani Symfony neochrání
fprochazka
0
150
Nejlepší cache je žádná cache
fprochazka
0
120
Doctrine: co dělat, když entity nestačí
fprochazka
0
61
Other Decks in Technology
See All in Technology
家族の思い出を形にする 〜 1秒動画の生成を支えるインフラアーキテクチャ
ojima_h
1
580
AIに目を奪われすぎて、周りの困っている人間が見えなくなっていませんか?
cap120
1
440
アカデミーキャンプ 2025 SuuuuuuMMeR「燃えろ!!ロボコン」 / Academy Camp 2025 SuuuuuuMMeR "Burn the Spirit, Robocon!!" DAY 1
ks91
PRO
0
130
オブザーバビリティプラットフォーム開発におけるオブザーバビリティとの向き合い / Hatena Engineer Seminar #34 オブザーバビリティの実現と運用編
arthur1
0
370
リリース2ヶ月で収益化した話
kent_code3
1
220
LLMをツールからプラットフォームへ〜Ai Workforceの戦略〜 #BetAIDay
layerx
PRO
1
900
隙間時間で爆速開発! Claude Code × Vibe Coding で作るマニュアル自動生成サービス
akitomonam
3
250
Bet "Bet AI" - Accelerating Our AI Journey #BetAIDay
layerx
PRO
4
1.6k
o11yツールを乗り換えた話
tak0x00
2
510
Claude Codeは仕様駆動の夢を見ない
gotalab555
23
5.6k
GMOペパボのデータ基盤とデータ活用の現在地 / Current State of GMO Pepabo's Data Infrastructure and Data Utilization
zaimy
3
210
KubeCon + CloudNativeCon Japan 2025 Recap
donkomura
0
190
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Become a Pro
speakerdeck
PRO
29
5.5k
How to Ace a Technical Interview
jacobian
278
23k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Balancing Empowerment & Direction
lara
1
530
Why Our Code Smells
bkeepers
PRO
337
57k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Designing Experiences People Love
moore
142
24k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Designing for Performance
lara
610
69k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Transcript
Nette/Tester Filip Procházka @HosipLan
None
Proč PHPUnit ne?
Kdyby/Framework Doctrine Events Console Redis Facebook Replicator
Příliš mnoho abstrakce
Špatně se rozšiřuje
Statika
Proč Nette/Tester?
Každý test je php script - snadné debuggování - otestujete
neotestovatelné - fatal errory - http hlavičky - sušenky
Vždy paralelní - každý test ve vlastním vlákně - maximální
izolace testů - lze spouštet XY testů zároveň - je možné je zámkem serializovat
Minimalistické api - Připomíná PHPUnit - TestCase::testExpectation() - @dataProvider -
TestCase ale není povinný - Assert::true($result)
Napsal ho Davídek ;)
Jak začít?
Instalace composer.json "require-dev": { "nette/tester": "@dev" } $ composer update
--dev
První test tests/Kdyby/example.phpt <?php // Hello World! if (2*2 !==
4) exit(1);
Zkusíme spustit $ php . /vendor/nette/tester/T ester/tester.php -j30 ./tests/
None
tests/bootstrap.php <?php include __DIR__ . '/../vendor/autoload.php'; Tester\Helpers::setup(); class_alias('Tester\Assert', 'Assert'); date_default_timezone_set('Europe/Prague');
define('TEMP_DIR', __DIR__ . '/tmp/' . getmypid()); Tester\Helpers::purge(TEMP_DIR);
github.com/nette/sandbox github.com/nette/nette Více na:
Asserty <?php require __DIR__ . '/../bootstrap.php'; Assert::true(2*2 === 4); Assert::same("a",
"a"); Assert::null(NULL);
Asserty <?php Assert::throws(function () { throw new Exception("Hello"); }, 'Exception',
"Hello");
Asserty <?php Assert::match( "%a% %d%.%d%", "Nette 2.0" );
Metadata <?php /** * Test: Nette\Diagnostics\Debugger * eval error in
HTML. * * @author David Grudl * @package Nette\Diagnostics * @assertCode 500 */
TestCase <?php class ComputationTest extends Tester\TestCase { public function testMath()
{ Assert::true(2*2 === 4); } } (new ComputationTest())->run();
TestCase <?php class ComputationTest extends Tester\TestCase { protected function setUp(){}
protected function tearDown(){}
TestCase <?php class ComputationTest extends Tester\TestCase { function dataString(){ return
[["a", "a"], ["b", "b"]]; } /** @dataProvider dataString */ function testString($a, $b) {}
DomQuery <?php $dom = Tester\DomQuery::fromHtml($html); Assert::true( $dom->has('input[name="username"]') ); Assert::true( $dom->has('input[name="password"]')
);
Code Coverage <?php // tests/bootstrap.php if (extension_loaded('xdebug')) { xdebug_disable(); Tester\CodeCoverage\Collector::start(
__DIR__ . '/coverage.dat' ); }
Code Coverage $ php ./vendor/nette/tester/ Tester/coverage-report.php -c tests/Kdyby/coverage.dat -s ./src/Kdyby/Redis/
-t "Kdyby/Redis"
None
Spouštění z IDE - testy jsou obyčejné php scripty -
right click and run - right click and debug - test runner je obyčejný script - right click and run
None
Nevýhody... - integrace do nástrojů? - někdy málo info ve
zprávách assertů - "array(2) is not equal to array(2)" - nemá výchozí mockovací nástroj - github.com/janmarek/mockista - chybí podpora Selenia - proužek s výsledkem nemění barvu :(
Dotazy?