Nette Tester / Posobota
-
Upload
filip-prochazka -
Category
Technology
-
view
2.318 -
download
8
description
Transcript of Nette Tester / Posobota
![Page 1: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/1.jpg)
Nette/TesterFilip Procházka @HosipLan
![Page 2: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/2.jpg)
![Page 3: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/3.jpg)
Proč PHPUnit ne?
![Page 4: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/4.jpg)
Kdyby/FrameworkDoctrineEvents
ConsoleRedis
FacebookReplicator
![Page 8: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/8.jpg)
Proč Nette/Tester?
![Page 9: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/9.jpg)
Každý test je php script- snadné debuggování- otestujete neotestovatelné
- fatal errory- http hlavičky- sušenky
![Page 10: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/10.jpg)
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
![Page 11: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/11.jpg)
Minimalistické api- Připomíná PHPUnit
- TestCase::testExpectation()- @dataProvider
- TestCase ale není povinný- Assert::true($result)
![Page 12: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/12.jpg)
Napsal ho Davídek ;)
![Page 13: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/13.jpg)
Jak začít?
![Page 14: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/14.jpg)
Instalacecomposer.json
"require-dev": { "nette/tester": "@dev"}
$ composer update --dev
![Page 15: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/15.jpg)
První testtests/Kdyby/example.phpt
<?php
// Hello World!if (2*2 !== 4) exit(1);
![Page 16: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/16.jpg)
Zkusíme spustit
$ php ./vendor/nette/tester/Tester/tester.php -j30 ./tests/
![Page 17: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/17.jpg)
![Page 18: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/18.jpg)
tests/bootstrap.php<?phpinclude __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);
![Page 19: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/19.jpg)
github.com/nette/sandboxgithub.com/nette/nette
Více na:
![Page 20: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/20.jpg)
Asserty<?php
require __DIR__ . '/../bootstrap.php';
Assert::true(2*2 === 4);Assert::same("a", "a");Assert::null(NULL);
![Page 21: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/21.jpg)
Asserty<?php
Assert::throws(function () {throw new Exception("Hello");
}, 'Exception', "Hello");
![Page 22: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/22.jpg)
Asserty<?php
Assert::match("%a% %d%.%d%","Nette 2.0"
);
![Page 23: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/23.jpg)
Metadata<?php
/** * Test: Nette\Diagnostics\Debugger * eval error in HTML. * * @author David Grudl * @package Nette\Diagnostics * @assertCode 500 */
![Page 24: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/24.jpg)
TestCase<?php
class ComputationTest extends Tester\TestCase {public function testMath() {Assert::true(2*2 === 4);
}}
(new ComputationTest())->run();
![Page 25: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/25.jpg)
TestCase<?php
class ComputationTest extends Tester\TestCase {
protected function setUp(){}protected function tearDown(){}
![Page 26: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/26.jpg)
TestCase<?php
class ComputationTest extends Tester\TestCase {
function dataString(){return [["a", "a"], ["b", "b"]];
}/** @dataProvider dataString */function testString($a, $b) {}
![Page 27: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/27.jpg)
DomQuery<?php
$dom = Tester\DomQuery::fromHtml($html);
Assert::true( $dom->has('input[name="username"]')
);
Assert::true($dom->has('input[name="password"]')
);
![Page 28: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/28.jpg)
Code Coverage
<?php // tests/bootstrap.php
if (extension_loaded('xdebug')) {xdebug_disable();Tester\CodeCoverage\Collector::start(
__DIR__ . '/coverage.dat');
}
![Page 29: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/29.jpg)
Code Coverage
$ php ./vendor/nette/tester/Tester/coverage-report.php -c tests/Kdyby/coverage.dat -s ./src/Kdyby/Redis/ -t "Kdyby/Redis"
![Page 30: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/30.jpg)
![Page 31: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/31.jpg)
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
![Page 32: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/32.jpg)
![Page 33: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/33.jpg)
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 :(
![Page 34: Nette Tester / Posobota](https://reader033.fdocuments.net/reader033/viewer/2022052321/548f63beb4795982638b4dbf/html5/thumbnails/34.jpg)
Dotazy?