Les tests en Symfony

C0040b96f9fb1adf5e8b99056b570c8a?s=47 GBProd
February 20, 2018

Les tests en Symfony

Slides pour les cours d'IUT sur les tests en Symfony

C0040b96f9fb1adf5e8b99056b570c8a?s=128

GBProd

February 20, 2018
Tweet

Transcript

  1. Les tests en Symfony

  2. Les tests en Symfony

  3. Les tests en PHP

  4. Les tests en PHP

  5. Les tests

  6. about:me @GillesRoustan

  7. None
  8. None
  9. about:tests

  10. C’est quoi un (bon) test ?

  11. None
  12. Du code qui vérifie le comportement du code

  13. Un peu de théorie ?

  14. None
  15. Pyramide de Cohn

  16. None
  17. Hiérarchie des tests Pyramide de Cohn

  18. Tests Unitaires Tests fonctionnels / intégration IHM Tests fonctionnels manuels

  19. None
  20. Tests unitaires : Teste une portion isolée de code

  21. Tests fonctionnel : Teste une fonctionnalité de l’application

  22. None
  23. Tests IHM : Vérifie que c’est joli

  24. Tests IHM : Vérifie que c’est joli

  25. Tests manuels :

  26. Ce qu’il faut éviter

  27. Tests Unitaires Tests de intégration / fonctionnels Tests IHM Tests

    fonctionnels manuels
  28. None
  29. Pourquoi on teste ?

  30. Valide que le code répond aux spécifications attendues

  31. Trouver les problèmes/bugs

  32. Trouver les effets de bords

  33. None
  34. Refactorer sereinement

  35. Être agile Responding to change over following a plan

  36. Donne confiance

  37. Conduit (souvent) à un meilleur design STUPID

  38. Devient la documentation du code

  39. Pour le patron ?

  40. Pour le patron : FAIRE DES ÉCONOMIES

  41. None
  42. Qu’est-ce qu’un bon test ?

  43. F.I.R.S.T

  44. Fast

  45. Independant

  46. Repeatable

  47. Self-validating

  48. Timely

  49. None
  50. about:tdd

  51. Test-driven development

  52. Red Green Refactor

  53. Red Green Refactor

  54. Red Green Refactor

  55. Red Green Refactor

  56. Composition d’un test

  57. Prepare Act Check

  58. Un mauvais test vaut mieux que pas de tests

  59. Prédictible

  60. about:frameworks

  61. Les frameworks de tests en PHP

  62. Atoum

  63. PHPUnit

  64. PHPSpec

  65. WebTestCase

  66. Behat

  67. Selenium

  68. PhantomJS / CasperJS

  69. Les assertions

  70. $this->assert*()

  71. $this->assertTrue() $this->assertFalse() $this->assertEquals() $this->assertNull() $this->assertInstanceOf()

  72. webmozart/assert

  73. about:mocks

  74. Mock / Stub

  75. Mock PHPUnit

  76. $stub = $this ->createMock(SomeClass::class);

  77. $stub->method(‘doItNow’) ->willReturn(‘Oui chef !’);

  78. $stub->method(‘doItNow’) ->willReturn(‘Oui chef !’);

  79. $em ->expects($this->once()) ->method(‘flush’);

  80. $rickRoll ->expects($this->never()) ->method("makeYouUnderstand") ->willReturn("give you up");

  81. None
  82. Mock PHPSpec

  83. $stub = $this ->prophesize(SomeClass::class);

  84. $stub->doItNow() ->willReturn(‘Oui chef !’);

  85. $stub->method(‘doItNow’) ->willReturn(‘Oui chef !’);

  86. $em->flush() ->shouldBeCalled();

  87. $rickRoll ->makeYouUnderstand() ->willReturn(‘give you up’) ->shouldNotBeCalled();

  88. $rickRoll->reveal();

  89. Expectations

  90. $this->expectException( \InvalidArgumentException::class );

  91. Fixtures

  92. Alice

  93. PHPUnit/DbUnit

  94. DoctrineFixtureBundle

  95. liip/LiipFunctionalTestBundle

  96. Mysql Dump

  97. WebTestCase

  98. use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class AwesomeControllerTest extends WebTestCase

  99. $client = static::createClient();

  100. $client->getResponse()->getContent()

  101. $crawler = $client->request( 'GET', '/lucky' );

  102. None
  103. $client->request( 'POST', '/submit', ['name' => 'GBProd'] );

  104. $crawler ->filter( 'html:contains("Hello World")' ) ->count()

  105. 'a:contains("Pay for it!")' 'ul.tags > li' 'input[type=submit]' 'h3[test-tag="cgu-title"]'

  106. $form = $crawler ->filter( 'input[test-tag=pay-button]' ) ->form();

  107. about:metrics

  108. Code coverage

  109. Code coverage

  110. Code coverage

  111. Mutations Modifier le code pour faire planter les tests

  112. Mutations kahlan

  113. about:test-after

  114. about:test-after

  115. Détecter les spécifications

  116. if / else / while / for / switch...

  117. Have a break

  118. about:kata

  119. Kata FizzBuzz

  120. Fizz Buzz Ecrire une méthode fizzbuzzify(int n) qui retourne une

    chaîne de caractères (string) à partir du nombre n. Pour les multiples de 3, il faudra remplacer le nombre par Fizz. Pour les multiples de 5, il faudra remplacer le nombre par Buzz. Pour les multiples et 3 et de 5, il faudra remplacer le nombre par FizzBuzz. Sinon on renvoie le nombre sans le modifier. Exemple : 1 2 Fizz 4 Buzz … Remarque : Pour 15, il faudra afficher FizzBuzz.