Upload
filip-prochazka
View
2.317
Download
8
Embed Size (px)
DESCRIPTION
Citation preview
Nette/TesterFilip Procházka @HosipLan
Proč PHPUnit ne?
Kdyby/FrameworkDoctrineEvents
ConsoleRedis
FacebookReplicator
Příliš mnoho abstrakce
Špatně se rozšiřuje
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?
Instalacecomposer.json
"require-dev": { "nette/tester": "@dev"}
$ composer update --dev
První testtests/Kdyby/example.phpt
<?php
// Hello World!if (2*2 !== 4) exit(1);
Zkusíme spustit
$ php ./vendor/nette/tester/Tester/tester.php -j30 ./tests/
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);
github.com/nette/sandboxgithub.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"
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
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?