Nette/TesterFilip Procházka @HosipLan
Proč PHPUnit ne?
Kdyby/FrameworkDoctrineEventsConsoleRedisFacebookReplicator
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 ...
Minimalistické api- Připomíná PHPUnit- TestCase::testExpectation()- @dataProvider- TestCase ale není povinný- Assert::true...
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;TesterHelpers::setup();class_alias(TesterAssert, Assert)...
github.com/nette/sandboxgithub.com/nette/netteVíce na:
Asserty<?phprequire __DIR__ . /../bootstrap.php;Assert::true(2*2 === 4);Assert::same("a", "a");Assert::null(NULL);
Asserty<?phpAssert::throws(function () {throw new Exception("Hello");}, Exception, "Hello");
Asserty<?phpAssert::match("%a% %d%.%d%","Nette 2.0");
Metadata<?php/*** Test: NetteDiagnosticsDebugger* eval error in HTML.** @author David Grudl* @package NetteDiagnostics* @a...
TestCase<?phpclass ComputationTestextends TesterTestCase {public function testMath() {Assert::true(2*2 === 4);}}(new Compu...
TestCase<?phpclass ComputationTestextends TesterTestCase {protected function setUp(){}protected function tearDown(){}
TestCase<?phpclass ComputationTestextends TesterTestCase {function dataString(){return [["a", "a"], ["b", "b"]];}/** @data...
DomQuery<?php$dom = TesterDomQuery::fromHtml($html);Assert::true($dom->has(input[name="username"]));Assert::true($dom->has...
Code Coverage<?php // tests/bootstrap.phpif (extension_loaded(xdebug)) {xdebug_disable();TesterCodeCoverageCollector::star...
Code Coverage$ php ./vendor/nette/tester/Tester/coverage-report.php-c tests/Kdyby/coverage.dat-s ./src/Kdyby/Redis/-t "Kdy...
Spouštění z IDE- testy jsou obyčejné php scripty- right click and run- right click and debug- test runner je obyčejný scri...
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...
Dotazy?
Nette Tester / Posobota
Nette Tester / Posobota
Nette Tester / Posobota
Nette Tester / Posobota
Upcoming SlideShare
Loading in …5
×

Nette Tester / Posobota

3,402 views

Published on

Published in: Technology
  • Be the first to comment

Nette Tester / Posobota

  1. 1. Nette/TesterFilip Procházka @HosipLan
  2. 2. Proč PHPUnit ne?
  3. 3. Kdyby/FrameworkDoctrineEventsConsoleRedisFacebookReplicator
  4. 4. Příliš mnoho abstrakce
  5. 5. Špatně se rozšiřuje
  6. 6. Statika
  7. 7. Proč Nette/Tester?
  8. 8. Každý test je php script- snadné debuggování- otestujete neotestovatelné- fatal errory- http hlavičky- sušenky
  9. 9. 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
  10. 10. Minimalistické api- Připomíná PHPUnit- TestCase::testExpectation()- @dataProvider- TestCase ale není povinný- Assert::true($result)
  11. 11. Napsal ho Davídek ;)
  12. 12. Jak začít?
  13. 13. Instalacecomposer.json"require-dev": {"nette/tester": "@dev"}$ composer update --dev
  14. 14. První testtests/Kdyby/example.phpt<?php// Hello World!if (2*2 !== 4) exit(1);
  15. 15. Zkusíme spustit$ php ./vendor/nette/tester/Tester/tester.php-j30 ./tests/
  16. 16. tests/bootstrap.php<?phpinclude __DIR__ . /../vendor/autoload.php;TesterHelpers::setup();class_alias(TesterAssert, Assert);date_default_timezone_set(Europe/Prague);define(TEMP_DIR,__DIR__ . /tmp/ . getmypid());TesterHelpers::purge(TEMP_DIR);
  17. 17. github.com/nette/sandboxgithub.com/nette/netteVíce na:
  18. 18. Asserty<?phprequire __DIR__ . /../bootstrap.php;Assert::true(2*2 === 4);Assert::same("a", "a");Assert::null(NULL);
  19. 19. Asserty<?phpAssert::throws(function () {throw new Exception("Hello");}, Exception, "Hello");
  20. 20. Asserty<?phpAssert::match("%a% %d%.%d%","Nette 2.0");
  21. 21. Metadata<?php/*** Test: NetteDiagnosticsDebugger* eval error in HTML.** @author David Grudl* @package NetteDiagnostics* @assertCode 500*/
  22. 22. TestCase<?phpclass ComputationTestextends TesterTestCase {public function testMath() {Assert::true(2*2 === 4);}}(new ComputationTest())->run();
  23. 23. TestCase<?phpclass ComputationTestextends TesterTestCase {protected function setUp(){}protected function tearDown(){}
  24. 24. TestCase<?phpclass ComputationTestextends TesterTestCase {function dataString(){return [["a", "a"], ["b", "b"]];}/** @dataProvider dataString */function testString($a, $b) {}
  25. 25. DomQuery<?php$dom = TesterDomQuery::fromHtml($html);Assert::true($dom->has(input[name="username"]));Assert::true($dom->has(input[name="password"]));
  26. 26. Code Coverage<?php // tests/bootstrap.phpif (extension_loaded(xdebug)) {xdebug_disable();TesterCodeCoverageCollector::start(__DIR__ . /coverage.dat);}
  27. 27. Code Coverage$ php ./vendor/nette/tester/Tester/coverage-report.php-c tests/Kdyby/coverage.dat-s ./src/Kdyby/Redis/-t "Kdyby/Redis"
  28. 28. 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
  29. 29. 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 :(
  30. 30. Dotazy?

×