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
210
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
190
Value objects in PHP
fprochazka
1
200
Jak psát testy na REST API
fprochazka
0
99
V gitu se nic neztratí
fprochazka
0
380
Co se PHP programátor může naučit od Javy?
fprochazka
1
120
4 roky remote
fprochazka
1
81
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
62
Other Decks in Technology
See All in Technology
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
490
OCI Oracle Database Services新機能アップデート(2025/06-2025/08)
oracle4engineer
PRO
0
170
新アイテムをどう使っていくか?みんなであーだこーだ言ってみよう / 20250911-rpi-jam-tokyo
akkiesoft
0
300
RSCの時代にReactとフレームワークの境界を探る
uhyo
10
3.5k
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
570
新規プロダクトでプロトタイプから正式リリースまでNext.jsで開発したリアル
kawanoriku0
1
160
「Linux」という言葉が指すもの
sat
PRO
4
140
20250913_JAWS_sysad_kobe
takuyay0ne
2
230
DevIO2025_継続的なサービス開発のための技術的意思決定のポイント / how-to-tech-decision-makaing-devio2025
nologyance
1
440
初めてAWSを使うときのセキュリティ覚書〜初心者支部編〜
cmusudakeisuke
1
270
Unlocking the Power of AI Agents with LINE Bot MCP Server
linedevth
0
110
下手な強制、ダメ!絶対! 「ガードレール」を「檻」にさせない"ガバナンス"の取り方とは?
tsukaman
2
450
Featured
See All Featured
Six Lessons from altMBA
skipperchong
28
4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Agile that works and the tools we love
rasmusluckow
330
21k
Building Applications with DynamoDB
mza
96
6.6k
4 Signs Your Business is Dying
shpigford
184
22k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
Into the Great Unknown - MozCon
thekraken
40
2k
Designing for Performance
lara
610
69k
The Cult of Friendly URLs
andyhume
79
6.6k
Bash Introduction
62gerente
615
210k
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?