{"id":454337,"date":"2024-03-07T16:21:05","date_gmt":"2024-03-07T15:21:05","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=phpstorm&#038;p=454337"},"modified":"2025-09-17T09:51:17","modified_gmt":"2025-09-17T08:51:17","slug":"ia-pour-php-comment-automatiser-les-tests-unitaires-avec-l-ai-assistant","status":"publish","type":"phpstorm","link":"https:\/\/blog.jetbrains.com\/fr\/phpstorm\/2024\/03\/ia-pour-php-comment-automatiser-les-tests-unitaires-avec-l-ai-assistant\/","title":{"rendered":"IA pour PHP\u00a0: comment automatiser les tests unitaires avec l&#8217;AI Assistant"},"content":{"rendered":"<p>Les tests. Si vous voyez les choses comme moi, vous conviendrez qu&#8217;ils sont \u00e0 la fois importants et ennuyeux. Ils font partie de ces t\u00e2ches dont on sait qu&#8217;elles nous apporteront quelque chose de positif, mais que l&#8217;on trouve r\u00e9barbatives sur le moment.<\/p>\n<p>Qu&#8217;est-ce qui fait que les tests sont si laborieux\u00a0?<\/p>\n<p>En ce qui me concerne, c&#8217;est la charge de travail li\u00e9e \u00e0 la <strong>configuration initiale<\/strong> qui est le principal probl\u00e8me. Je sais qu&#8217;une fois qu&#8217;un test en mis en place, je pourrai y apporter des modifications et l&#8217;adapter tout au long de la dur\u00e9e de vie du projet, c&#8217;est vraiment <em>le d\u00e9marrage<\/em> qui me rebute le plus.<\/p>\n<p>Ne serait-ce pas g\u00e9nial si la phase initiale d&#8217;\u00e9criture d&#8217;un test <strong>pouvait \u00eatre simplifi\u00e9e<\/strong>\u00a0? Si on disposait d&#8217;un plan g\u00e9n\u00e9ral pour les tests \u00e0 utiliser comme point de d\u00e9part et qu&#8217;on n&#8217;avait plus qu&#8217;\u00e0 l&#8217;adapter en fonction de nos besoins\u00a0? Si on pouvait se focaliser sur les parties les plus sympas d&#8217;un projet et laisser notre ordinateur s&#8217;occuper des t\u00e2ches ennuyeuses\u00a0?<\/p>\n<p>L&#8217;IA peut nous aider sur ces diff\u00e9rents points.<\/p>\n<p>Nous avons r\u00e9cemment introduit un outil d&#8217;IA puissant dans <a href=\"https:\/\/www.jetbrains.com\/fr-fr\/ides\/\" target=\"_blank\" rel=\"noopener\">tous nos IDE<\/a>, dont <a href=\"https:\/\/www.jetbrains.com\/fr-fr\/phpstorm\/\" target=\"_blank\" rel=\"noopener\">PhpStorm<\/a>\u00a0: <a href=\"https:\/\/www.jetbrains.com\/fr-fr\/ai\/\" target=\"_blank\" rel=\"noopener\">l&#8217;AI Assistant<\/a>. Dans cet article, j&#8217;explique comment utiliser l&#8217;AI Assistant pour automatiser les t\u00e2ches de programmations ennuyeuses et pouvoir se concentrer sur les parties les plus int\u00e9ressantes du processus de tests.<\/p>\n<h2 class=\"wp-block-heading\">Tests unitaires automatis\u00e9s avec l&#8217;AI Assistant<\/h2>\n<p>La g\u00e9n\u00e9ration de tests unitaires constitue un tr\u00e8s bon exemple du type d&#8217;aide que l&#8217;AI Assistant peut apporter. Prenons l&#8217;extrait de code suivant\u00a0:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/v-G-4cEyCGjq_NQtmr1Wp2tjFwTxO9P-aB_Agy6rwkFnZOXDl8BIcXx8-0iiGlrkeltbwUE_467nyKM5OoU0b9u8WgIFlIF8bjidXj2H4QcUNhQ71lUUxTXKe4MostqJnmAttmeGsCRLo5S6hxCUoHY-1.png\" alt=\"\" \/><\/figure>\n<p>Cet extrait provient du projet open source RFC Vote. Vous pouvez trouver l&#8217;int\u00e9gralit\u00e9 du code source <a href=\"https:\/\/github.com\/brendt\/rfc-vote\/blob\/main\/app\/Actions\/CreateArgumentComment.php\" target=\"_blank\" rel=\"noopener\">ici<\/a>. Ce projet permet \u00e0 la communaut\u00e9 PHP de discuter des demandes de commentaires (RFC) ouvertes. Les participants peuvent partager des arguments pour ou contre et avoir des discussions constructives sur l&#8217;\u00e9volution de PHP.<\/p>\n<p>Cette classe permet de cr\u00e9er un commentaire sur un argument existant. Un commentaire appartient \u00e0 un utilisateur, fait r\u00e9f\u00e9rence \u00e0 un argument et a un corps. Enfin, chaque fois qu&#8217;un commentaire est \u00e9crit, des notifications doivent \u00eatre envoy\u00e9es \u00e0 tous les utilisateurs suivant l&#8217;argument sp\u00e9cifique.<\/p>\n<p>Nous allons utiliser l&#8217;AI Assistant pour cr\u00e9er un test et voir ce que cela donne.<\/p>\n<p>Commencez par placer le curseur dans le corps de la m\u00e9thode <code>__invoke<\/code>, puis appuyez sur <em>Alt+Entr\u00e9e<\/em> et s\u00e9lectionnez <em>AI Actions | Generate Unit Tests<\/em> dans le menu contextuel.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/I-bEq5upCmf901SnuyGv_mr2qg3687h7tGyk4hj2ZcjylhVXuhSu4gdq8TxSDR5oj4VrkpDGHZmGf6Yo6RLoj1D6gbhCDpbv3foINrV5p_enEd83Nnna7knWBtaSE8ORra-g5nb6cN5gSadv6aGobK0-1.png\" alt=\"\" \/><\/figure>\n<p>L&#8217;AI Assistant va maintenant \u00e9crire pour vous une \u00e9bauche de test pour cette classe. Si vous souhaitez savoir comment l&#8217;AI Assistant proc\u00e8de, lisez <a href=\"https:\/\/blog.jetbrains.com\/fr\/blog\/2023\/12\/06\/presentation-de-jetbrains-ai-et-de-l-ai-assistant-dans-les-ide\/\">cet article<\/a>. Lorsque l&#8217;AI Assistant a termin\u00e9, vous disposez d&#8217;une premi\u00e8re version, comme ci-dessous :<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/QPyq1vkGrACdNapVwimBfDVsHxWtuH002YQxDnS-CPPdLRvBhGXZf6ImEJgNg-PPmKlNEjyYSUp4qTObKbzi5wUe8k88HefY0bjqaVjHegfMfecBsVbUvaD-ygYWEWKh0EWMMucgi5wZgdHAyDNj1Ls-1.png\" alt=\"\" \/><\/figure>\n<p>Vous pouvez alors appuyer sur le bouton <em>Accept all<\/em>, ce qui cr\u00e9era un nouveau fichier de test au bon endroit et copiera cette \u00e9bauche dans le fichier de test r\u00e9el, ou choisir d&#8217;appuyer sur le bouton <em>Refresh<\/em> afin de g\u00e9n\u00e9rer une nouvelle impl\u00e9mentation au cas o\u00f9 vous ayez d\u00e9tect\u00e9 des probl\u00e8mes.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/ZFFNyMpatMxIazGB9ATwUmXBF9Olr_9GdHjdVhZ2IwK5eWYXTVlknETuCSpS4I1yIX1uumhI4M9H0JL9vzw8tt07wxsAmx4jEBxRwmz-DG_LflZTXrS3_TOccyOSJvPkQn0Mw_9AkxClhDJGQ-cYn7s-1.png\" alt=\"\" \/><\/figure>\n<p>Pour ma part, j&#8217;ai actualis\u00e9 une ou deux fois avant d&#8217;opter pour <em>Accept all<\/em> et d&#8217;ex\u00e9cuter mon test.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/2gGC7xtkbo_OtP5zg7_uX6PwbDILcftIkG6psWGzTWNtkFRCa9zzpLa7rG6wv6Dkjl3qEhMiQb2JoHQcqhRyNM2yXmaUjqPfelhIMTtMy_IuNOxyIJz9UP5eMTbeO8i1Po1I_7GTFDuyt-EOpS-3QAA-1.png\" alt=\"\" \/><\/figure>\n<p>Pratique, non\u00a0?<\/p>\n<p>Mais attendez, il y a quelques points \u00e0 pr\u00e9ciser.<\/p>\n<p>Tout d&#8217;abord, toutes les g\u00e9n\u00e9rations de tests ne fonctionnent pas forc\u00e9ment parfaitement du premier coup. Par exemple, certaines versions incluent le trait <code>RefreshDatabase<\/code>, une pratique courante dans les tests Laravel. Cependant, dans ce projet, les tests de base de donn\u00e9es sont configur\u00e9s un peu diff\u00e9remment, j&#8217;ai donc d\u00fb apporter un petit ajustement \u00e0 la sortie g\u00e9n\u00e9r\u00e9e. Parfois, il arrive aussi que le r\u00e9sultat propos\u00e9 par l&#8217;AI Assistant ne corresponde pas exactement \u00e0 votre style de code. Bien qu&#8217;il prenne en compte les param\u00e8tres de style de code, certains d\u00e9tails sont plus complexes \u00e0 traiter et il peut y avoir quelques imperfections.<\/p>\n<p>Ceci dit, il faut garder \u00e0 l&#8217;esprit que l&#8217;objectif n&#8217;est pas de g\u00e9n\u00e9rer le test parfait, mais <strong>d&#8217;avoir une structure<\/strong> pour nous servir de base. L&#8217;AI Assistant a une excellente compr\u00e9hension du contexte de ce que nous souhaitons tester et son efficacit\u00e9 nous permet de gagner du temps et de nous concentrer sur les aspects les plus int\u00e9ressants des tests.<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/fr-fr\/ai\/\" target=\"\" rel=\"noopener\">En savoir plus sur l&#8217;AI Assistant<\/a><\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">Automatisation pour Pest<\/h2>\n<p>Bien que le framework de test Pest soit relativement r\u00e9cent, <a href=\"https:\/\/www.jetbrains.com\/lp\/devecosystem-2023\/php\/#php_testing\" target=\"_blank\" rel=\"noopener\">son utilisation a connu une croissance significative<\/a> en 2023. Par ailleurs, l&#8217;\u00e9quipe PhpStorm a <a href=\"https:\/\/blog.jetbrains.com\/phpstorm\/2023\/10\/the-pest-plugin-is-now-maintained-by-jetbrains\/\">pris en charge le d\u00e9veloppement du plugin Pest<\/a> en octobre l&#8217;ann\u00e9e derni\u00e8re. La prise en charge de Pest par l&#8217;AI Assistant est en cours de d\u00e9veloppement et sera disponible dans la prochaine version majeure, PhpStorm 2024.1. Nous allons bient\u00f4t publier plusieurs articles de blog montrant comment les utilisateurs de Pest peuvent b\u00e9n\u00e9ficier de l&#8217;AI Assistant., alors restez \u00e0 l&#8217;\u00e9coute.<\/p>\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n<p>Avoir la possibilit\u00e9 de cr\u00e9er automatiquement des tests unitaires avec un minimum d&#8217;intervention manuelle est d\u00e9j\u00e0 tr\u00e8s satisfaisant, mais il reste encore quelques ajustements \u00e0 apporter.<\/p>\n<p>Nous vous invitons \u00e0 lire <a href=\"https:\/\/blog.jetbrains.com\/phpstorm\/2024\/02\/ai-for-php-how-to-tweak-ai-prompts-to-improve-php-tests\/\">cet article de blog<\/a>, dans lequel nous examinons plus en d\u00e9tail comment optimiser la g\u00e9n\u00e9ration de tests avec l&#8217;AI Assistant pour gagner encore plus de temps. Pour ne rien manquer de notre actualit\u00e9, <strong>abonnez vous \u00e0 notre blog<\/strong> dans la section ci-dessous\u00a0!<\/p>\n<h2 class=\"wp-block-heading\">Liens utiles<\/h2>\n<p><strong>Ressources :<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/fr\/phpstorm\/2024\/03\/ia-pour-php-comment-adapter-les-prompts-d-ia-pour-ameliorer-les-tests-php\/\">IA pour PHP\u00a0: comment adapter les prompts d&#8217;IA pour am\u00e9liorer les tests PHP <\/a><\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/phpstorm\/ai-assistant.html\" target=\"_blank\" rel=\"noopener\">L&#8217;AI Assistant dans PhpStorm<\/a> (documentation)<\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/fr-fr\/phpstorm\/laravel\/\" target=\"_blank\" rel=\"noopener\">Prise en charge de Laravel dans PhpStorm<\/a><\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/fr-fr\/ai\/#plans-and-pricing\" target=\"_blank\" rel=\"noopener\">Tarification de l&#8217;AI Assistant<\/a><\/li>\n<\/ul>\n<p><strong>Vid\u00e9os :<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/youtu.be\/-NnYtfzO7qU?feature=shared\" target=\"_blank\" rel=\"noopener\">Pr\u00e9sentation de l&#8217;AI Assistant de JetBrains<\/a><\/li>\n<li><a href=\"https:\/\/youtu.be\/k8EzKJDlbFo?feature=shared\" target=\"_blank\" rel=\"noopener\">Utiliser PHP et l&#8217;IA pour cr\u00e9er un convertisseur Markdown en Vid\u00e9o<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=-lIUuQWJRPk\" target=\"_blank\" rel=\"noopener\">Comment convertir des tests PHPUnit en Pest en 5 secondes<\/a><\/li>\n<\/ul>\n<p><em>Auteur de l&#8217;article original en anglais<\/em> :<\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":813,"featured_media":443693,"comment_status":"closed","ping_status":"closed","template":"","categories":[2347],"tags":[8168,8337,443],"cross-post-tag":[8396],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/phpstorm\/454337"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/phpstorm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/phpstorm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=454337"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/phpstorm\/454337\/revisions"}],"predecessor-version":[{"id":618589,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/phpstorm\/454337\/revisions\/618589"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/443693"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=454337"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=454337"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=454337"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=454337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}