Nette Tester / Posobota

Post on 14-Dec-2014

2,315 views 8 download

description

 

transcript

Nette/TesterFilip Procházka @HosipLan

Proč PHPUnit ne?

Kdyby/FrameworkDoctrineEvents

ConsoleRedis

FacebookReplicator

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?