{"id":458086,"date":"2024-02-23T12:04:11","date_gmt":"2024-02-23T11:04:11","guid":{"rendered":"https:\/\/blog.jetbrains.com\/phpstorm\/2024\/02\/ai-for-php-how-to-make-ai-assistant-generate-test-implementations\/"},"modified":"2025-09-17T09:41:19","modified_gmt":"2025-09-17T08:41:19","slug":"ai-for-php-how-to-make-ai-assistant-generate-test-implementations","status":"publish","type":"phpstorm","link":"https:\/\/blog.jetbrains.com\/pt-br\/phpstorm\/2024\/02\/ai-for-php-how-to-make-ai-assistant-generate-test-implementations\/","title":{"rendered":"IA para PHP: como fazer com que o AI Assistant gere implementa\u00e7\u00f5es de testes"},"content":{"rendered":"<p>Come\u00e7amos <a href=\"https:\/\/blog.jetbrains.com\/pt-br\/phpstorm\/2024\/02\/how-to-generate-php-tests-with-jetbrains-ai-assistant\/\">esta s\u00e9rie<\/a> analisando como o <a href=\"https:\/\/www.jetbrains.com\/pt-br\/ai\/\" target=\"_blank\" rel=\"noopener\">JetBrains AI Assistant<\/a> pode gerar testes a partir de uma implementa\u00e7\u00e3o existente. Mas, e se quisermos usar o AI Assistant ao contr\u00e1rio? E se quisermos adotar uma abordagem de desenvolvimento mais orientada a testes, escrevendo nossos testes primeiro e fazendo com que o AI Assistant gere uma implementa\u00e7\u00e3o para n\u00f3s?<\/p>\n<p>Vamos dar uma olhada em como podemos fazer isso.<\/p>\n<h2 class=\"wp-block-heading\">Gerar c\u00f3digo com o chat do AI Assistant<\/h2>\n<p>A primeira etapa para gerar uma implementa\u00e7\u00e3o \u00e9 ter um teste. Vamos supor que estamos construindo um barramento de comando e temos o seguinte teste:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/OcgTucNO41d-FPqUFaEmmmHT8e7ClqFk9eTgj3cuoIchYBjdAgfAOXoOzvplGJAsUHH1mJLJpUP5qLS7B3pKYDiQcRQG6OcKcZAHm1FJeUtOifJm7xGOi60cTWswDGyQHS9RdsgI77QAxzru76P56BQ.png\" alt=\"\" \/><\/figure>\n<p>N\u00e3o escrevemos mais nada &#8211; ainda n\u00e3o existe uma classe <code>CommandBus<\/code>, muito menos uma implementa\u00e7\u00e3o para os m\u00e9todos <code>handle<\/code> e <code>getHistory<\/code>. Vamos usar o AI Assistant para gerar a implementa\u00e7\u00e3o para n\u00f3s. Para come\u00e7ar, abra o menu <em>AI Actions<\/em> selecionando o texto e pressionando <em>Alt+Enter \/ \u2325Enter<\/em>. Em seguida, escolha <em>New Chat Using Selection<\/em>:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/vqtpv5ftmzrAWfGN7Yjf0iYVOf_aoY0DC17qrsstEoLqWA6yIgGHB_h8R5YnjwPUE67sTMPvkwvA0cSMeJWK9sGXui_4UfXX4MRcjck_3KDHizKYuChDcnaSBCmN1iZJslpEgn7LwvlR-hOF_e8ijOg.png\" alt=\"\" \/><\/figure>\n<p>O <a href=\"https:\/\/www.jetbrains.com\/pt-br\/phpstorm\/\" target=\"_blank\" rel=\"noopener\">PhpStorm<\/a> abrir\u00e1 a janela de chat do <em>AI Assistant<\/em>. Aqui, voc\u00ea pode conversar com o AI Assistant e perguntar o que quiser. O snippet de c\u00f3digo que voc\u00ea selecionou j\u00e1 estar\u00e1 presente na janela de chat, ent\u00e3o vamos dar um prompt simples \u2013 \u201cwrite an implementation for this test&#8221; (escreva uma implementa\u00e7\u00e3o para este teste):<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/MjBTRSFs5eyMWCCnyxARN4YQJ5Zwz7sD1acH6YEB0C7ctohFgrO-HLqufD_EU3k4GpBYNCM8wIliX7f3JAIHNlsFk58s5suZ0setdi4WeIdHnaLJFij9wOU-iagGkma90escovdaMjzcsaR5rS5_QGA.png\" alt=\"\" \/><\/figure>\n<p>Em alguns segundos, o AI Assistant ter\u00e1 a implementa\u00e7\u00e3o pronta:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/6GwpIdGYJQ0G6AOr3ifqvSkMuM9unAwAPinxKSxpItLqn1BMhEmdRczoQ4Sfh4fgAcLYlymcg-xeuB_pXUQvl9VDvxFo5M0c0VWRTgh136bw0WqOF1XVRC7s0yl6epkTqh9EGxQqhCSZzzOVBKuVUSg.png\" alt=\"\" \/><\/figure>\n<p>Vamos copiar esse c\u00f3digo em um arquivo e executar nosso teste para ver o que acontece:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/R_fCNsUtGcXwolmLNq-Ik58seRh7wD9UXPwvF7L4qoYrFKmSxY9oZiiW4ddPx7Ewq2ZXAD45e9O7f2KoQP10PA-X1IOqMUBPMDw8T6g9VoaxyniWI3Qt-CD_gijD_CM3oQ7N_otkULHnhTEzjc2yR-Y.png\" alt=\"\" \/><\/figure>\n<p>Funciona! O AI Assistant escreveu uma implementa\u00e7\u00e3o funcional para nosso teste. Percorrendo o c\u00f3digo, parece uma implementa\u00e7\u00e3o s\u00f3lida, embora iremos alterar alguns detalhes estil\u00edsticos. Nosso objetivo com o AI Assistant ao longo desta s\u00e9rie n\u00e3o foi fazer com que o AI Assistant escrevesse o c\u00f3digo perfeito para n\u00f3s, mas gerar aquele c\u00f3digo b\u00e1sico chato que podemos usar como ponto de partida, economizando um tempo valioso. Foi exatamente isso que o AI Assistant fez!<\/p>\n<p>E se quisermos usar esse prompt v\u00e1rias vezes? Existe uma maneira de reutiliz\u00e1-lo?<\/p>\n<p>\u00c9 claro que sim!<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/pt-br\/ai\/#plans-and-pricing\" target=\"\" rel=\"noopener\">Experimente o AI Assistant<\/a><\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">Salvando prompts personalizados<\/h2>\n<p>Abra o menu <em>AI Actions<\/em> pressionando <em>Alt+Enter \/ \u2325Enter<\/em> em algum lugar do seu c\u00f3digo. Em vez de escolher um item de menu existente, clique no link <em>Add Your Prompts<\/em> na parte inferior:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/reaoxLgYJmqMTsjMmAL6kSqcU7zsQhSeT5pkRuf-yny6dfo-bYYApsiVGMiHaE7SDE3TXeGpNauISkUUW7gBk2phYbw338Vk6iMzHHio5btnZQ604VvZuNOoSk_2EXW18kLJhNL0yzWL2JRDRKUalMQ.png\" alt=\"\" \/><\/figure>\n<p>O PhpStorm permite escrever prompts personalizados e salv\u00e1-los como a\u00e7\u00f5es personalizadas de IA, que \u00e9 o que queremos fazer neste caso. Dentro desses prompts, voc\u00ea pode usar a vari\u00e1vel <code>$SELECTION<\/code>, que conter\u00e1 qualquer c\u00f3digo que voc\u00ea selecionou, ao invocar seu prompt personalizado.<\/p>\n<p>Vamos escrever um prompt para nosso caso de uso: criar a implementa\u00e7\u00e3o para um teste selecionado:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/ePkUUeMLIwXZpXkISTVlkCHLcFxQQZdj7wuijXrgLYkFvgT1J9cZdo5xUJ_VsoRyznIL7-dBf0HUdaEEPPbIdKYr-INs4EDmkDY3p2e2GbGFfkN5fSyzKHEVPBwNUEuUH_IKY9wT1SZvOd7fJEObVrs.png\" alt=\"\" \/><\/figure>\n<p>Vamos experimentar! Selecione o teste novamente, pressione <em>Alt+Enter \/ \u2325Enter<\/em> para abrir o menu <em>AI Actions <\/em>, e voc\u00ea ver\u00e1 como a a\u00e7\u00e3o <em>Write Implementation<\/em> personalizada j\u00e1 est\u00e1 dispon\u00edvel!<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/mvO8Rs5U7K-JOWWfGyPk4OG1ZITHsrk72CvyCydr6pwt4Kz2rst_zdTZ_sxYYPuQeXjSiWjJ3BaDPwZwG6YAh2iZvRe88PiBAk1E4Sj4pvcoSkEl0cUTmalXkNoVAioL0jg59NSzQOlhiUGGpOj6TZQ.png\" alt=\"\" \/><\/figure>\n<p>Selecione a a\u00e7\u00e3o, e voc\u00ea ver\u00e1 que o PhpStorm escreve imediatamente a mensagem correta no AI Assistant, tornando nossa a\u00e7\u00e3o assistida por IA reutiliz\u00e1vel!<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/Z-nU9TmmfUVHY8o1B-VQcxe6rnbfGxD7w_5LtbxungwCxgQjiaAOIPUSwg1aDH_j60tHNJ11nkRBllYfXjRqHY5Du-qqyyNk4t4H_pMlFEl5ArtK127hYnY2kzZsjQgmRM0nla1pxt4OkmJvqMqDk_M.png\" alt=\"\" \/><\/figure>\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n<p>Ao longo <a href=\"https:\/\/blog.jetbrains.com\/pt-br\/phpstorm\/2024\/02\/how-to-generate-php-tests-with-jetbrains-ai-assistant\/\">desta s\u00e9rie<\/a>, n\u00f3s vimos v\u00e1rios exemplos de como podemos usar o AI Assistant em nosso benef\u00edcio. N\u00e3o esperamos que ele escreva um c\u00f3digo perfeito, mas o usamos para gerar o c\u00f3digo b\u00e1sico que podemos usar como ponto de partida. \u00c9 interessante ver o qu\u00e3o preciso o AI Assistant \u00e9 ao escrever c\u00f3digos que funcionam, e estou ansioso para ver ele melhorar ainda mais nos pr\u00f3ximos lan\u00e7amentos.<\/p>\n<p>Pessoalmente, n\u00e3o acho que a IA substituir\u00e1 os programadores reais t\u00e3o cedo, mas acho que \u00e9 uma \u00f3tima ferramenta que pode ajudar a acelerar o processo de escrita de c\u00f3digo, especialmente as partes rotineiras, para que possamos nos concentrar nas partes do nosso c\u00f3digo que mais importam.<\/p>\n<p>Quais s\u00e3o suas expectativas em rela\u00e7\u00e3o \u00e0 IA para ajud\u00e1-lo em seu trabalho? Compartilhe sua opini\u00e3o nos coment\u00e1rios!<\/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\">Links \u00fateis<\/h2>\n<p>Gostou de ler este post do nosso blog? Aqui est\u00e3o mais posts desta s\u00e9rie:<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/pt-br\/phpstorm\/2024\/02\/ai-for-php-how-to-automate-unit-testing-using-ai-assistant\/\">IA para PHP: como automatizar testes de unidade usando o AI Assistant<\/a><\/li>\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<\/ul>\n<p><strong>Recursos:<\/strong><\/p>\n<ul>\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\/ai\/#plans-and-pricing\" target=\"_blank\" rel=\"noopener\">Pre\u00e7os do AI Assistant<\/a><\/li>\n<\/ul>\n<p><strong>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<\/ul>\n<p><em>Artigo original em ingl\u00eas por:<\/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":1086,"featured_media":447495,"comment_status":"closed","ping_status":"closed","template":"","categories":[2347],"tags":[8168,8337],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/phpstorm\/458086"}],"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\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/comments?post=458086"}],"version-history":[{"count":6,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/phpstorm\/458086\/revisions"}],"predecessor-version":[{"id":618100,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/phpstorm\/458086\/revisions\/618100"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media\/447495"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=458086"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=458086"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=458086"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=458086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}