{"id":458059,"date":"2024-02-13T16:23:41","date_gmt":"2024-02-13T15:23:41","guid":{"rendered":"https:\/\/blog.jetbrains.com\/phpstorm\/2024\/02\/ai-for-php-how-to-automate-unit-testing-using-ai-assistant\/"},"modified":"2025-09-17T09:43:12","modified_gmt":"2025-09-17T08:43:12","slug":"ai-for-php-how-to-automate-unit-testing-using-ai-assistant","status":"publish","type":"phpstorm","link":"https:\/\/blog.jetbrains.com\/pt-br\/phpstorm\/2024\/02\/ai-for-php-how-to-automate-unit-testing-using-ai-assistant\/","title":{"rendered":"IA para PHP: como automatizar testes de unidade usando o AI Assistant"},"content":{"rendered":"<p>Testes. Se voc\u00ea for como eu, concordar\u00e1 que eles s\u00e3o importantes, mas ainda assim muito chatos. \u00c9 uma daquelas coisas que n\u00e3o \u00e9 muito divertida de fazer, mas que voc\u00ea sabe que vai compensar mais tarde.<\/p>\n<p>Mas o que torna os testes t\u00e3o desagrad\u00e1veis?<\/p>\n<p>Para mim, o maior obst\u00e1culo \u00e9 a sobrecarga que acompanha a <strong>configura\u00e7\u00e3o inicial<\/strong>. Sei que, depois de implementar um teste, ficarei feliz em fazer altera\u00e7\u00f5es e ajustes durante a vida \u00fatil do projeto. Mas, meu maior obst\u00e1culo \u00e9 <em>come\u00e7ar<\/em>.<\/p>\n<p>E se essa configura\u00e7\u00e3o inicial de escrever um teste <strong>pudesse ser simplificada<\/strong>? E se pud\u00e9ssemos obter gratuitamente um esbo\u00e7o de teste, us\u00e1-lo como ponto de partida e simplesmente ajust\u00e1-lo conforme necess\u00e1rio? E se pud\u00e9ssemos nos concentrar nas partes divertidas e deixar um computador fazer as coisas chatas?<\/p>\n<p>\u00c9 aqui que a IA pode nos ajudar.<\/p>\n<p>Recentemente, introduzimos uma ferramenta poderosa em <a href=\"https:\/\/www.jetbrains.com\/pt-br\/ides\/\" target=\"_blank\" rel=\"noopener\">todos os nossos IDEs<\/a>, incluindo o <a href=\"https:\/\/www.jetbrains.com\/pt-br\/phpstorm\/\" target=\"_blank\" rel=\"noopener\">PhpStorm<\/a>: o <a href=\"https:\/\/www.jetbrains.com\/pt-br\/ai\/\" target=\"_blank\" rel=\"noopener\">JetBrains AI Assistant<\/a>. Neste post do nosso blog, quero ver como podemos usar o AI Assistant para automatizar as partes chatas da programa\u00e7\u00e3o, para que possamos nos concentrar nas partes mais interessantes dos testes.<\/p>\n<h2 class=\"wp-block-heading\">Testes de unidade automatizados com o AI Assistant<\/h2>\n<p>A gera\u00e7\u00e3o de testes de unidade \u00e9 um exemplo perfeito de onde o AI Assistant pode nos ajudar. Vamos considerar o seguinte snippet de c\u00f3digo:<\/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.png\" alt=\"\" \/><\/figure>\n<p>Este \u00e9 um trecho retirado de um projeto chamado RFC Vote, que \u00e9 open-source. Voc\u00ea pode encontrar o c\u00f3digo-fonte completo <a href=\"https:\/\/github.com\/brendt\/rfc-vote\/blob\/main\/app\/Actions\/CreateArgumentComment.php\" target=\"_blank\" rel=\"noopener\">aqui<\/a>. Este projeto permite que a comunidade PHP discuta RFCs abertas. As pessoas podem argumentar sobre os pr\u00f3s e os contras e ter discuss\u00f5es perspicazes sobre a evolu\u00e7\u00e3o do PHP.<\/p>\n<p>Essa classe espec\u00edfica \u00e9 respons\u00e1vel por criar um coment\u00e1rio sobre um argumento existente. Um coment\u00e1rio pertence a um usu\u00e1rio, tem uma refer\u00eancia a um argumento e tem um corpo. Por fim, sempre que um coment\u00e1rio \u00e9 escrito, notifica\u00e7\u00f5es devem ser enviadas a todos os usu\u00e1rios que seguem um argumento espec\u00edfico.<\/p>\n<p>Vamos usar o AI Assistant para criar um teste para n\u00f3s e ver o que ele pode fazer.<\/p>\n<p>Comece colocando o cursor no corpo deste m\u00e9todo <code>__invoke<\/code>, pressione <em>Alt+Enter<\/em> e selecione <em>AI Actions | Generate Unit Tests<\/em> no menu de contexto.<\/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.png\" alt=\"\" \/><\/figure>\n<p>O AI Assistant agora escrever\u00e1 uma vers\u00e3o preliminar de um teste para essa classe para voc\u00ea. Se quiser saber como o AI Assistant faz tudo isso, leia <a href=\"https:\/\/blog.jetbrains.com\/pt-br\/blog\/2023\/12\/06\/apresentando-o-jetbrains-ai-e-o-ai-assistant-nos-ides\/\">este post<\/a>. Quando o AI Assistant terminar, voc\u00ea ver\u00e1 uma vers\u00e3o de rascunho como esta:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/QPyq1vkGrACdNapVwimBfDVsHxWtuH002YQxDnS-CPPdLRvBhGXZf6ImEJgNg-PPmKlNEjyYSUp4qTObKbzi5wUe8k88HefY0bjqaVjHegfMfecBsVbUvaD-ygYWEWKh0EWMMucgi5wZgdHAyDNj1Ls.png\" alt=\"\" \/><\/figure>\n<p>A a\u00e7\u00e3o mais direta \u00e9 pressionar o bot\u00e3o <em>Accept all<\/em>, que criar\u00e1 um novo arquivo de teste no local correto e copiar\u00e1 esse rascunho de implementa\u00e7\u00e3o para o arquivo de teste real. No entanto, voc\u00ea tamb\u00e9m pode pressionar o bot\u00e3o <em>Refresh<\/em> para gerar uma implementa\u00e7\u00e3o totalmente nova, caso detecte algum problema imediato.<\/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.png\" alt=\"\" \/><\/figure>\n<p>No meu caso, atualizei uma ou duas vezes, pressionei <em>Accept all<\/em> e executei meu teste.<\/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.png\" alt=\"\" \/><\/figure>\n<p>Muito legal, n\u00e3o \u00e9?<\/p>\n<p>Agora, espere um pouco. H\u00e1 algumas outras coisas para destacar.<\/p>\n<p>Em primeiro lugar, nem todas as gera\u00e7\u00f5es funcionar\u00e3o diretamente sem problemas. Por exemplo, algumas vers\u00f5es inclu\u00edam a caracter\u00edstica <code>RefreshDatabase<\/code>, uma pr\u00e1tica comum em testes Laravel. No entanto, neste projeto, tenho os testes de banco de dados configurados de maneira um pouco diferente, ent\u00e3o tive que fazer um pequeno ajuste na sa\u00edda gerada. \u00c0s vezes, o AI Assistant tamb\u00e9m gera c\u00f3digo que n\u00e3o se alinha totalmente ao seu estilo de c\u00f3digo. Ele faz o poss\u00edvel para levar em considera\u00e7\u00e3o as configura\u00e7\u00f5es de estilo de c\u00f3digo, mas alguns detalhes s\u00e3o dif\u00edceis de acertar.<\/p>\n<p>Apesar de algumas defici\u00eancias, tenha em mente que nosso objetivo n\u00e3o \u00e9 gerar o teste perfeito, e sim <strong>ter uma estrutura<\/strong> sobre a qual possamos construir. O AI Assistant \u00e9 incrivelmente bom em entender o contexto do que queremos testar e faz muitas coisas certas. Isso economiza tempo e nos permite focar nas partes mais interessantes do teste.<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/pt-br\/ai\/\" target=\"\" rel=\"noopener\">Saiba mais sobre o AI Assistant<\/a><\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">Automa\u00e7\u00e3o em Pest<\/h2>\n<p>2023 <a href=\"https:\/\/www.jetbrains.com\/pt-br\/lp\/devecosystem-2023\/php\/#php_testing\" target=\"_blank\" rel=\"noopener\">mostrou um crescimento significativo<\/a> para o relativamente novo framework de teste Pest. A equipe do PhpStorm <a href=\"https:\/\/blog.jetbrains.com\/phpstorm\/2023\/10\/the-pest-plugin-is-now-maintained-by-jetbrains\/\">assumiu o desenvolvimento do plug-in Pest<\/a> no ano passado tamb\u00e9m. No momento, o suporte do AI Assistant para Pest \u00e9 um trabalho em andamento e estar\u00e1 dispon\u00edvel na pr\u00f3xima vers\u00e3o principal, o PhpStorm 2024.1. Fique ligado \u2013 definitivamente demonstraremos como os usu\u00e1rios do Pest podem se beneficiar do AI Assistant nos pr\u00f3ximos posts do nosso blog.<\/p>\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n<p>Ser capaz de criar testes de unidade automaticamente \u2013 com o m\u00ednimo de trabalho manual \u2013 j\u00e1 \u00e9 bastante impressionante, mas ainda h\u00e1 mais alguns ajustes a serem feitos.<\/p>\n<p>Explore o <a href=\"https:\/\/blog.jetbrains.com\/pt-br\/phpstorm\/2024\/02\/ai-for-php-how-to-tweak-ai-prompts-to-improve-php-tests\/\">pr\u00f3ximo post desta s\u00e9rie no nosso blog<\/a>, no qual analisamos mais de perto como podemos ajustar a gera\u00e7\u00e3o de testes do JetBrains AI Assistant para economizar ainda mais tempo. <strong>Assine nosso blog<\/strong> na se\u00e7\u00e3o de assinatura abaixo e n\u00e3o perca nossas novidades!<\/p>\n<h2 class=\"wp-block-heading\">Links \u00fateis<\/h2>\n<p><strong>Materiais:<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/pt-br\/phpstorm\/2024\/02\/ai-for-php-how-to-tweak-ai-prompts-to-improve-php-tests\/\">IA para PHP: como ajustar prompts de IA para melhorar testes de PHP <\/a><\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/help\/phpstorm\/ai-assistant.html\" target=\"_blank\" rel=\"noopener\">AI Assistant no PhpStorm<\/a> (documenta\u00e7\u00e3o)<\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/pt-br\/phpstorm\/laravel\/\" target=\"_blank\" rel=\"noopener\">Suporte para Laravel no PhpStorm<\/a><\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/pt-br\/ai\/#plans-and-pricing\" target=\"_blank\" rel=\"noopener\">Pre\u00e7os do AI Assistant<\/a><\/li>\n<\/ul>\n<p><strong><br \/>V\u00eddeos:<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/youtu.be\/-NnYtfzO7qU?feature=shared\" target=\"_blank\" rel=\"noopener\">Introdu\u00e7\u00e3o ao JetBrains AI Assistant<\/a><\/li>\n<li><a href=\"https:\/\/youtu.be\/k8EzKJDlbFo?feature=shared\" target=\"_blank\" rel=\"noopener\">Usando PHP e IA para construir um conversor de Markdown para v\u00eddeo<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=-lIUuQWJRPk\" target=\"_blank\" rel=\"noopener\">Como converter PHPUnit em Pest em 5 segundos<\/a><\/li>\n<\/ul>\n<p><em>Artigo original em ingl\u00eas por:<\/em><\/p>\n<\/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":1326,"featured_media":443700,"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\/pt-br\/wp-json\/wp\/v2\/phpstorm\/458059"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/phpstorm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/types\/phpstorm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/users\/1326"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/comments?post=458059"}],"version-history":[{"count":8,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/phpstorm\/458059\/revisions"}],"predecessor-version":[{"id":618103,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/phpstorm\/458059\/revisions\/618103"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media\/443700"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=458059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=458059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=458059"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=458059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}