{"id":5923,"date":"2026-04-14T13:36:29","date_gmt":"2026-04-14T16:36:29","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=5923"},"modified":"2026-04-14T14:00:29","modified_gmt":"2026-04-14T17:00:29","slug":"testes-unitarios-cakephp","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/","title":{"rendered":"Testes Unit\u00e1rios CakePHP"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 6<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\n<p class=\"has-medium-font-size wp-block-paragraph\">Testes Unit\u00e1rios CakePHP: Voc\u00ea j\u00e1 sentiu aquele frio na barriga ao subir uma atualiza\u00e7\u00e3o no seu sistema e rezar para que nada tenha quebrado? Para muitos desenvolvedores, o &#8220;deploy&#8221; \u00e9 um momento de tens\u00e3o. Mas, e se eu te dissesse que existe uma forma de garantir que seu c\u00f3digo funciona exatamente como deveria, antes mesmo de ele chegar ao servidor?<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Como especialista em <strong>CakePHP<\/strong>, preparei este vig\u00e9simo terceiro artigo da nossa s\u00e9rie para introduzir voc\u00ea ao mundo dos <strong>Testes Unit\u00e1rios<\/strong>. Vamos dominar o <strong>PHPUnit<\/strong> e aprender como criar uma rede de seguran\u00e7a para o seu c\u00f3digo, garantindo que o seu blog ou qualquer outro sistema que venha a criar cres\u00e7am com robustez e qualidade t\u00e9cnica inquestion\u00e1vel.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">Testes Unit\u00e1rios: Uma introdu\u00e7\u00e3o ao PHPUnit dentro do framework CakePHP<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Testes Unit\u00e1rios CakePHP: No desenvolvimento de software moderno, escrever c\u00f3digo que &#8220;funciona&#8221; \u00e9 apenas o primeiro passo. O verdadeiro desafio \u00e9 escrever c\u00f3digo que continue funcionando ap\u00f3s seis meses de altera\u00e7\u00f5es e refatora\u00e7\u00f5es. \u00c9 aqui que entram os <strong>Testes Unit\u00e1rios<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Testar uma unidade de c\u00f3digo significa isolar uma pequena parte da sua aplica\u00e7\u00e3o (como um m\u00e9todo de uma Table ou uma l\u00f3gica de um Componente) e verificar se, dada uma entrada espec\u00edfica, ela produz a sa\u00edda esperada. No CakePHP, isso \u00e9 feito de forma integrada com o <strong>PHPUnit<\/strong>, o padr\u00e3o ouro para testes em PHP.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">1. Por que testar? (A mentalidade do desenvolvedor s\u00eanior)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Muitos desenvolvedores veem os testes como uma perda de tempo ou &#8220;trabalho dobrado&#8221;. No entanto, a realidade \u00e9 o oposto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Confian\u00e7a total:<\/strong> Voc\u00ea pode alterar uma l\u00f3gica complexa e saber em segundos se quebrou algo em outra parte do sistema.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Documenta\u00e7\u00e3o Viva:<\/strong> Os testes mostram exatamente como uma fun\u00e7\u00e3o deve se comportar.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Design de C\u00f3digo Melhor:<\/strong> C\u00f3digos dif\u00edceis de testar geralmente est\u00e3o mal projetados. Testar te for\u00e7a a escrever fun\u00e7\u00f5es menores e mais organizadas (o princ\u00edpio da responsabilidade \u00fanica).<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Economia a longo prazo:<\/strong> Corrigir um bug em produ\u00e7\u00e3o \u00e9 muito mais caro e estressante do que corrigi-lo durante o desenvolvimento.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">2. Estrutura e Ambiente de Testes no CakePHP<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O CakePHP j\u00e1 vem preparado para testes &#8220;out of the box&#8221;. Ao usar o comando <code>bake<\/code>, o framework frequentemente gera os arquivos de teste para voc\u00ea.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Onde ficam os testes?<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A pasta principal \u00e9 a <code>tests\/<\/code>, organizada de forma a espelhar a estrutura do seu c\u00f3digo fonte:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><code>tests\/TestCase\/Controller\/<\/code><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><code>tests\/TestCase\/Model\/Table\/<\/code><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><code>tests\/TestCase\/Service\/<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Al\u00e9m disso, o arquivo de configura\u00e7\u00e3o principal \u00e9 o <code>phpunit.xml.dist<\/code>, localizado na raiz do projeto. Ele define quais pastas ser\u00e3o testadas e as configura\u00e7\u00f5es do banco de dados de teste.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">3. Fixtures: Dados Reais para Testes Reais<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Um dos maiores desafios ao testar o banco de dados \u00e9 garantir que o estado dos dados seja consistente. O CakePHP resolve isso com as <strong>Fixtures<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Uma Fixture \u00e9 uma classe que define o esquema e alguns dados iniciais para uma tabela tempor\u00e1ria que ser\u00e1 criada apenas durante a execu\u00e7\u00e3o dos testes. Assim, voc\u00ea n\u00e3o corre o risco de apagar seus dados reais de produ\u00e7\u00e3o ou desenvolvimento.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Exemplo de Fixture em <code>tests\/Fixture\/ArtigosFixture.php<\/code>:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>namespace App\\Test\\Fixture;\n\nuse Cake\\TestSuite\\Fixture\\TestFixture;\n\nclass ArtigosFixture extends TestFixture\n{\n    public $fields = &#91;\n        'id' =&gt; &#91;'type' =&gt; 'integer'],\n        'titulo' =&gt; &#91;'type' =&gt; 'string', 'length' =&gt; 255, 'null' =&gt; false],\n        'publicado' =&gt; &#91;'type' =&gt; 'boolean', 'default' =&gt; false],\n        '_constraints' =&gt; &#91;'primary' =&gt; &#91;'type' =&gt; 'primary', 'columns' =&gt; &#91;'id']]]\n    ];\n\n    public $records = &#91;\n        &#91;'id' =&gt; 1, 'titulo' =&gt; 'Primeiro Artigo', 'publicado' =&gt; 1],\n        &#91;'id' =&gt; 2, 'titulo' =&gt; 'Segundo Artigo', 'publicado' =&gt; 0],\n    ];\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">4. Escrevendo seu Primeiro Teste Unit\u00e1rio<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Vamos testar uma l\u00f3gica simples na nossa <code>ArtigosTable<\/code>. Suponha que temos um m\u00e9todo que retorna apenas artigos publicados.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">A Classe de Teste: <code>tests\/TestCase\/Model\/Table\/ArtigosTableTest.php<\/code><\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>namespace App\\Test\\TestCase\\Model\\Table;\n\nuse App\\Model\\Table\\ArtigosTable;\nuse Cake\\TestSuite\\TestCase;\n\nclass ArtigosTableTest extends TestCase\n{\n    protected $Artigos;\n\n    \/\/ Carregamos a Fixture necess\u00e1ria\n    protected array $fixtures = &#91;'app.Artigos'];\n\n    public function setUp(): void\n    {\n        parent::setUp();\n        \/\/ Inicializamos a Table para teste\n        $this-&gt;Artigos = $this-&gt;getTableLocator()-&gt;get('Artigos');\n    }\n\n    public function testFindPublicados()\n    {\n        $query = $this-&gt;Artigos-&gt;find('publicados');\n        $this-&gt;assertInstanceOf(\\Cake\\ORM\\Query::class, $query);\n        \n        $result = $query-&gt;toArray();\n        $this-&gt;assertCount(1, $result); \/\/ Esperamos 1 artigo (da nossa Fixture)\n        $this-&gt;assertEquals('Primeiro Artigo', $result&#91;0]-&gt;titulo);\n    }\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>O que aconteceu aqui?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><code>setUp()<\/code>: Prepara o ambiente antes de cada teste.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><code>assertCount()<\/code> e <code>assertEquals()<\/code>: S\u00e3o as &#8220;asser\u00e7\u00f5es&#8221;. Elas verificam se o resultado \u00e9 o que voc\u00ea esperava. Se n\u00e3o for, o teste falha.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">5. Testando Controllers (Integration Tests)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Testar Controllers no CakePHP \u00e9 fascinante porque voc\u00ea pode simular requisi\u00e7\u00f5es HTTP completas (GET, POST) e verificar redirecionamentos, sess\u00f5es e vari\u00e1veis da view sem precisar de um navegador.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>public function testAdicionarSucesso()\n{\n    $this-&gt;enableCsrfToken(); \/\/ Habilita prote\u00e7\u00e3o CSRF para o teste\n    $this-&gt;enableSecurityToken();\n\n    $data = &#91;\n        'titulo' =&gt; 'Novo Artigo de Teste',\n        'corpo' =&gt; 'Conte\u00fado do teste',\n        'publicado' =&gt; 1\n    ];\n\n    $this-&gt;post('\/artigos\/add', $data);\n\n    $this-&gt;assertResponseSuccess(); \/\/ Verifica se o status \u00e9 2xx ou 3xx\n    $this-&gt;assertRedirect(&#91;'action' =&gt; 'index']); \/\/ Verifica se redirecionou\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">6. Executando os Testes<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para rodar seus testes, voc\u00ea usa o terminal. O CakePHP j\u00e1 configura o comando via Composer:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>vendor\/bin\/phpunit\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Se voc\u00ea quiser rodar apenas um arquivo espec\u00edfico:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>vendor\/bin\/phpunit tests\/TestCase\/Model\/Table\/ArtigosTableTest.php\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">7. Boas Pr\u00e1ticas para Testes de Elite<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para se tornar um mestre em testes no CakePHP, siga estas diretrizes:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Testes Independentes:<\/strong> Um teste nunca deve depender do resultado de outro. Cada teste deve limpar seu rastro (o CakePHP faz isso automaticamente com as Fixtures).<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>D\u00ea nomes descritivos:<\/strong> <code>testSomaDeveRetornarQuatroQuandoDoisEDoisSaoPassados<\/code> \u00e9 melhor que <code>testSoma<\/code>.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>TDD (Test Driven Development):<\/strong> Experimente escrever o teste <em>antes<\/em> de escrever o c\u00f3digo. Isso muda completamente sua percep\u00e7\u00e3o de como estruturar a l\u00f3gica.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>N\u00e3o teste o Framework:<\/strong> Voc\u00ea n\u00e3o precisa testar se o <code>find()<\/code> do CakePHP funciona. O time do Cake j\u00e1 faz isso. Teste a <strong>sua<\/strong> l\u00f3gica de neg\u00f3cio e as suas customiza\u00e7\u00f5es.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Mantenha os testes r\u00e1pidos:<\/strong> Se os testes demorarem 10 minutos para rodar, voc\u00ea deixar\u00e1 de us\u00e1-los. Use mocks para APIs externas (Artigo 20) para n\u00e3o depender da internet.<\/li>\n<\/ol>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">Conclus\u00e3o: Dormindo Tranquilo com C\u00f3digo Protegido<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Testes Unit\u00e1rios CakePHP: Os <strong>Testes Unit\u00e1rios no CakePHP<\/strong> s\u00e3o o divisor de \u00e1guas entre um c\u00f3digo amador e uma aplica\u00e7\u00e3o de n\u00edvel empresarial. Ao implementar o <strong>PHPUnit<\/strong>, voc\u00ea est\u00e1 investindo no futuro do seu projeto. O tempo &#8220;gasto&#8221; escrevendo testes retorna multiplicado em forma de facilidade de manuten\u00e7\u00e3o e aus\u00eancia de bugs catastr\u00f3ficos.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Seja para garantir que a l\u00f3gica do seu blog n\u00e3o falhe ou para validar as regras de cadastro do seu sistema, os testes s\u00e3o seus aliados mais fi\u00e9is. Eles n\u00e3o mentem, n\u00e3o cansam e est\u00e3o sempre l\u00e1 para dizer: &#8220;Pode fazer o deploy, Thiago, o c\u00f3digo est\u00e1 seguro!&#8221;.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Agora que sua aplica\u00e7\u00e3o est\u00e1 protegida por testes, voc\u00ea atingiu o \u00e1pice da maturidade t\u00e9cnica no CakePHP. Voc\u00ea est\u00e1 pronto para enfrentar qualquer desafio no mercado global de desenvolvimento.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Mas antes de dominar o CakePHP, se for o seu caso, toda jornada tem um in\u00edcio. Vamos entender quais s\u00e3o os conhecimentos b\u00e1sicos necess\u00e1rios para aproveitar ao m\u00e1ximo este poderoso framework. Para iniciar seus estudos no CakePHP, voc\u00ea precisar\u00e1 dominar as seguintes tecnologias:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/html\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp\" alt=\"HTML\" class=\"wp-image-600\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">HTML<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/css\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp\" alt=\"CSS\" class=\"wp-image-702\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">CSS<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/javascript\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp\" alt=\"Javascript\" class=\"wp-image-804\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">JavaScript<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/sql\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp\" alt=\"SQL\" class=\"wp-image-942\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">SQL<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/php\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png\" alt=\"Capa Curso PHP\" class=\"wp-image-2835\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP-300x169.png 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">PHP<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">E se voc\u00ea gosta do nosso conte\u00fado, n\u00e3o deixe de contribuir adquirindo os servi\u00e7os e produtos dos nossos apoiadores e empresas que somos associados.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/hostinger.com.br\/?REFERRALCODE=1THIAGO62\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/03\/hostinger.png\" alt=\"Hospedagem Hostinger\" class=\"wp-image-92\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNDYlc\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/ofertas-amazon.webp\" alt=\"Ofertas Amazon\" class=\"wp-image-1308\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNKmt0\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/amazonprime.webp\" alt=\"Amazon Prime\" class=\"wp-image-1307\"\/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Dica de Especialista:<\/strong> Comece pequeno. N\u00e3o tente testar 100% do seu sistema legado hoje. Comece testando as novas funcionalidades que voc\u00ea criar. Com o tempo, voc\u00ea ver\u00e1 a &#8220;cobertura de c\u00f3digo&#8221; (code coverage) aumentar e sua ansiedade diminuir proporcionalmente!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 6<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>Testes Unit\u00e1rios CakePHP: Voc\u00ea j\u00e1 sentiu aquele frio na barriga ao subir uma atualiza\u00e7\u00e3o no&#8230;<\/p>\n","protected":false},"author":1,"featured_media":5819,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[97],"tags":[],"class_list":["post-5923","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cakephp","wpcat-97-id"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Testes Unit\u00e1rios CakePHP - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"Testes Unit\u00e1rios CakePHP: No desenvolvimento de software moderno, escrever c\u00f3digo que &quot;funciona&quot; \u00e9 apenas o primeiro passo. O verdadeiro ...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Testes Unit\u00e1rios CakePHP - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"Testes Unit\u00e1rios CakePHP: No desenvolvimento de software moderno, escrever c\u00f3digo que &quot;funciona&quot; \u00e9 apenas o primeiro passo. O verdadeiro ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-14T16:36:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-14T17:00:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png\" \/>\n\t<meta property=\"og:image:width\" content=\"758\" \/>\n\t<meta property=\"og:image:height\" content=\"426\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Thiago Rossi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thiago Rossi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/testes-unitarios-cakephp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/testes-unitarios-cakephp\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"Testes Unit\u00e1rios CakePHP\",\"datePublished\":\"2026-04-14T16:36:29+00:00\",\"dateModified\":\"2026-04-14T17:00:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/testes-unitarios-cakephp\\\/\"},\"wordCount\":1075,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/testes-unitarios-cakephp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"articleSection\":[\"CakePHP\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/testes-unitarios-cakephp\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/testes-unitarios-cakephp\\\/\",\"name\":\"Testes Unit\u00e1rios CakePHP - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/testes-unitarios-cakephp\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/testes-unitarios-cakephp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"datePublished\":\"2026-04-14T16:36:29+00:00\",\"dateModified\":\"2026-04-14T17:00:29+00:00\",\"description\":\"Testes Unit\u00e1rios CakePHP: No desenvolvimento de software moderno, escrever c\u00f3digo que \\\"funciona\\\" \u00e9 apenas o primeiro passo. O verdadeiro ...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/testes-unitarios-cakephp\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/testes-unitarios-cakephp\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/testes-unitarios-cakephp\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"width\":758,\"height\":426,\"caption\":\"CakePHP\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/testes-unitarios-cakephp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Testes Unit\u00e1rios CakePHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"name\":\"THIAGO ROSSI\",\"description\":\"Mais de 20 anos de experi\u00eancia no mercado de TI!\",\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"alternateName\":\"TR | CURSO WEB DEV\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\",\"name\":\"THIAGO ROSSI\",\"alternateName\":\"TR | CURSO WEB DEV\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"width\":300,\"height\":300,\"caption\":\"THIAGO ROSSI\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\",\"name\":\"Thiago Rossi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"caption\":\"Thiago Rossi\"},\"description\":\"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \\\"GDD \u2013 O Guia Definitivo\\\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.\",\"sameAs\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\",\"https:\\\/\\\/instagram.com\\\/thiagorossix86\",\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"],\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/author\\\/thiagorossi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Testes Unit\u00e1rios CakePHP - BLOG THIAGO ROSSI","description":"Testes Unit\u00e1rios CakePHP: No desenvolvimento de software moderno, escrever c\u00f3digo que \"funciona\" \u00e9 apenas o primeiro passo. O verdadeiro ...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/","og_locale":"pt_BR","og_type":"article","og_title":"Testes Unit\u00e1rios CakePHP - BLOG THIAGO ROSSI","og_description":"Testes Unit\u00e1rios CakePHP: No desenvolvimento de software moderno, escrever c\u00f3digo que \"funciona\" \u00e9 apenas o primeiro passo. O verdadeiro ...","og_url":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2026-04-14T16:36:29+00:00","article_modified_time":"2026-04-14T17:00:29+00:00","og_image":[{"width":758,"height":426,"url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","type":"image\/png"}],"author":"Thiago Rossi","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Thiago Rossi","Est. tempo de leitura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"Testes Unit\u00e1rios CakePHP","datePublished":"2026-04-14T16:36:29+00:00","dateModified":"2026-04-14T17:00:29+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/"},"wordCount":1075,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","articleSection":["CakePHP"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/","url":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/","name":"Testes Unit\u00e1rios CakePHP - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","datePublished":"2026-04-14T16:36:29+00:00","dateModified":"2026-04-14T17:00:29+00:00","description":"Testes Unit\u00e1rios CakePHP: No desenvolvimento de software moderno, escrever c\u00f3digo que \"funciona\" \u00e9 apenas o primeiro passo. O verdadeiro ...","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/#primaryimage","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","width":758,"height":426,"caption":"CakePHP"},{"@type":"BreadcrumbList","@id":"https:\/\/thiagorossi.com.br\/blog\/testes-unitarios-cakephp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Testes Unit\u00e1rios CakePHP"}]},{"@type":"WebSite","@id":"https:\/\/thiagorossi.com.br\/blog\/#website","url":"https:\/\/thiagorossi.com.br\/blog\/","name":"THIAGO ROSSI","description":"Mais de 20 anos de experi\u00eancia no mercado de TI!","publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"alternateName":"TR | CURSO WEB DEV","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thiagorossi.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/thiagorossi.com.br\/blog\/#organization","name":"THIAGO ROSSI","alternateName":"TR | CURSO WEB DEV","url":"https:\/\/thiagorossi.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","width":300,"height":300,"caption":"THIAGO ROSSI"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/linkedin.com\/in\/thiagox86"]},{"@type":"Person","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87","name":"Thiago Rossi","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","caption":"Thiago Rossi"},"description":"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \"GDD \u2013 O Guia Definitivo\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.","sameAs":["https:\/\/thiagorossi.com.br\/blog","https:\/\/instagram.com\/thiagorossix86","https:\/\/linkedin.com\/in\/thiagox86"],"url":"https:\/\/thiagorossi.com.br\/blog\/author\/thiagorossi\/"}]}},"_links":{"self":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/comments?post=5923"}],"version-history":[{"count":3,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5923\/revisions"}],"predecessor-version":[{"id":5928,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5923\/revisions\/5928"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media\/5819"}],"wp:attachment":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media?parent=5923"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=5923"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=5923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}