<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Anderson Leite</title>
    <description>The latest articles on Forem by Anderson Leite (@andersonleite).</description>
    <link>https://forem.com/andersonleite</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F696039%2F86a8ecfc-83be-4599-84d0-35c1cf6bcc49.jpg</url>
      <title>Forem: Anderson Leite</title>
      <link>https://forem.com/andersonleite</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/andersonleite"/>
    <language>en</language>
    <item>
      <title>Como instalar o pgAdmin 4 no Ubuntu (modo Desktop ou Web)</title>
      <dc:creator>Anderson Leite</dc:creator>
      <pubDate>Thu, 03 Jul 2025 00:46:21 +0000</pubDate>
      <link>https://forem.com/andersonleite/como-instalar-o-pgadmin-4-no-ubuntu-modo-desktop-ou-web-k3d</link>
      <guid>https://forem.com/andersonleite/como-instalar-o-pgadmin-4-no-ubuntu-modo-desktop-ou-web-k3d</guid>
      <description>&lt;p&gt;Quero deixar aqui registrado as etapas que realizei para instalar o &lt;strong&gt;pgAdmin 4&lt;/strong&gt; no meu PC que roda o Ubuntu. Este passo a passo serve tanto para consultas futuras quanto para ajudar quem estiver pensando em fazer o mesmo e está enfrentando dificuldades.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Instale as dependências necessárias
&lt;/h2&gt;

&lt;p&gt;Atualize os pacotes do sistema e instale os pacotes requeridos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;curl ca-certificates gnupg &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Adicione o repositório do pgAdmin
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Importe a chave GPG:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/share/keyrings/pgadmin.gpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adicione o repositório ao APT:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [signed-by=/usr/share/keyrings/pgadmin.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsb_release &lt;span class="nt"&gt;-cs&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; pgadmin4 main"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/pgadmin4.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Atualize novamente os pacotes:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Instale o pgAdmin 4
&lt;/h2&gt;

&lt;p&gt;Você pode escolher entre &lt;strong&gt;modo Desktop&lt;/strong&gt; ou &lt;strong&gt;modo Web&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Modo Desktop (interface gráfica no sistema):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;pgadmin4-desktop &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔹 Modo Web (acessado via navegador):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;pgadmin4-web &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. (Se escolheu modo Web) Configure o pgAdmin Web
&lt;/h2&gt;

&lt;p&gt;Após a instalação via modo Web, execute o script de configuração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/pgadmin4/bin/setup-web.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O script solicitará as seguintes informações:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email para login&lt;/li&gt;
&lt;li&gt;Senha&lt;/li&gt;
&lt;li&gt;Confirmação das configurações&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Acesso via navegador:
&lt;/h3&gt;

&lt;p&gt;Após a configuração, o pgAdmin ficará disponível em:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost/pgadmin4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;blockquote&gt;
&lt;p&gt;✅ &lt;strong&gt;Dica:&lt;/strong&gt; Se estiver utilizando em ambiente de produção, considere configurar SSL e autenticação adicional no seu servidor web para proteger o acesso ao pgAdmin.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>postgres</category>
      <category>pgadm</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Instalação do PostgreSQL no Ubuntu</title>
      <dc:creator>Anderson Leite</dc:creator>
      <pubDate>Thu, 03 Jul 2025 00:35:53 +0000</pubDate>
      <link>https://forem.com/andersonleite/instalacao-do-postgresql-no-ubuntu-4dk1</link>
      <guid>https://forem.com/andersonleite/instalacao-do-postgresql-no-ubuntu-4dk1</guid>
      <description>&lt;p&gt;Quero deixar aqui registrado as etapas que realizei para instalar o PostgreSQL no meu PC que roda o Ubuntu. Este passo a passo serve tanto para consultas futuras quanto para ajudar quem estiver pensando em fazer o mesmo e está enfrentando dificuldades.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Atualize os pacotes existentes
&lt;/h2&gt;

&lt;p&gt;Antes de mais nada, é importante garantir que todos os pacotes do sistema estejam atualizados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Adicione o repositório oficial do PostgreSQL
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Instale as dependências necessárias:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;wget ca-certificates gnupg lsb-release &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adicione a chave pública do repositório:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;--quiet&lt;/span&gt; &lt;span class="nt"&gt;-O&lt;/span&gt; - https://www.postgresql.org/media/keys/ACCC4CF8.asc | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/share/keyrings/postgresql.gpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adicione o repositório à lista de fontes do APT:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [signed-by=/usr/share/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsb_release &lt;span class="nt"&gt;-cs&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;-pgdg main"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/pgdg.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Atualize o APT e instale o PostgreSQL
&lt;/h2&gt;

&lt;p&gt;Agora, com o repositório adicionado, atualize novamente o APT e instale o PostgreSQL com seus componentes adicionais:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;postgresql postgresql-contrib &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Verifique se o serviço está ativo
&lt;/h2&gt;

&lt;p&gt;Após a instalação, verifique o status do serviço PostgreSQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se tudo estiver funcionando corretamente, você verá algo como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;active (exited)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ou&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;active (running)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Acesse o PostgreSQL via terminal
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Troque para o usuário padrão do PostgreSQL:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Acesse o prompt interativo do PostgreSQL:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;psql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A saída esperada será:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;postgres&lt;/span&gt;&lt;span class="o"&gt;=#&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Para sair do prompt:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. (Opcional) Criar um usuário e banco de dados
&lt;/h2&gt;

&lt;p&gt;Você pode criar um novo usuário e um banco de dados com os comandos abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;createuser &lt;span class="nt"&gt;--interactive&lt;/span&gt;
createdb nome_do_banco
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Nota&lt;/strong&gt;: Este guia foi testado em Ubuntu e pode variar levemente dependendo da versão utilizada. Certifique-se de substituir &lt;code&gt;nome_do_banco&lt;/code&gt; por um nome adequado ao seu projeto.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>programming</category>
      <category>postgres</category>
      <category>postgressql</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Conheça o Editor de Texto Online: Uma Ferramenta Minimalista para Todos os Usuários</title>
      <dc:creator>Anderson Leite</dc:creator>
      <pubDate>Wed, 05 Mar 2025 12:57:37 +0000</pubDate>
      <link>https://forem.com/andersonleite/conheca-o-editor-de-texto-online-uma-ferramenta-minimalista-para-todos-os-usuarios-j85</link>
      <guid>https://forem.com/andersonleite/conheca-o-editor-de-texto-online-uma-ferramenta-minimalista-para-todos-os-usuarios-j85</guid>
      <description>&lt;h2&gt;
  
  
  Recentemente, lancei o Editor de Texto Online
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;&lt;a href="https://www.editordetexto.online/" rel="noopener noreferrer"&gt;Editor de Texto Online&lt;/a&gt;&lt;/strong&gt; é uma ferramenta gratuita, leve e intuitiva, que permite escrever, editar e exportar textos de forma prática – ideal para estudantes, profissionais e escritores casuais. Publicar este artigo no dev.to faz parte da estratégia para aumentar a autoridade e o ranqueamento do site, pois backlinks vindos de sites com alta relevância, como o dev.to, podem favorecer o SEO.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que essa estratégia ajuda no SEO?
&lt;/h2&gt;

&lt;p&gt;Quando você publica conteúdo em plataformas reconhecidas e insere links para o seu site, como o &lt;strong&gt;Editor de Texto Online&lt;/strong&gt;, os motores de busca interpretam isso como um sinal de relevância e autoridade. Além disso, links externos de alta qualidade ajudam a direcionar tráfego qualificado e reforçam a credibilidade do seu domínio. Essa prática, combinada com conteúdo de qualidade e otimização on-page, é fundamental para melhorar o ranqueamento nos resultados de busca.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o Editor de Texto Online?
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;&lt;a href="https://www.editordetexto.online" rel="noopener noreferrer"&gt;Editor de Texto Online&lt;/a&gt;&lt;/strong&gt; é uma ferramenta web desenvolvida para proporcionar uma experiência de edição simples e eficiente. Com uma interface minimalista, a ferramenta oferece recursos essenciais, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Edição e formatação intuitiva:&lt;/strong&gt; Ideal para criar textos, resumos, artigos e documentos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exportação para PDF e DOCX:&lt;/strong&gt; Facilita o compartilhamento e a publicação dos conteúdos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leve e responsivo:&lt;/strong&gt; Compatível com diversos dispositivos, garantindo uma experiência fluida.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100% gratuito:&lt;/strong&gt; Sem custos, para que todos tenham acesso às funcionalidades que realmente importam.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Vantagens de utilizar a ferramenta
&lt;/h2&gt;

&lt;p&gt;Utilizar o &lt;strong&gt;Editor de Texto Online&lt;/strong&gt; traz diversas vantagens, tais como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Praticidade:&lt;/strong&gt; Não é necessário instalar nenhum software – tudo é feito diretamente no navegador.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versatilidade:&lt;/strong&gt; Adequado para diferentes perfis de usuários, desde aqueles que precisam apenas anotar ideias até profissionais que produzem conteúdos para blogs e sites.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance:&lt;/strong&gt; Por ser uma ferramenta leve, ela carrega rapidamente e se adapta a diversas condições de conexão.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interface limpa e intuitiva:&lt;/strong&gt; Foca apenas no que é essencial, evitando distrações e aumentando a produtividade na hora da escrita.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  O que me levou a desenvolver a ferramenta
&lt;/h2&gt;

&lt;p&gt;A ideia de criar o &lt;strong&gt;Editor de Texto Online&lt;/strong&gt; surgiu a partir de uma necessidade pessoal e de observar lacunas em ferramentas de edição disponíveis no mercado. Durante minha trajetória como desenvolvedor e usuário, percebi que muitos editores eram sobrecarregados de funcionalidades e complexos para o uso cotidiano. &lt;/p&gt;

&lt;p&gt;Queria algo que fosse rápido, simples e totalmente gratuito – uma ferramenta que atendesse tanto a quem precisa criar documentos simples quanto a profissionais que buscam uma solução prática para suas produções.&lt;/p&gt;

&lt;p&gt;Essa experiência me motivou a desenvolver uma solução que unisse eficiência, minimalismo e usabilidade.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>text</category>
      <category>editor</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Como Melhorar seu Código Java: 7 Boas Práticas e Padrões de Desenvolvimento</title>
      <dc:creator>Anderson Leite</dc:creator>
      <pubDate>Thu, 14 Nov 2024 16:09:49 +0000</pubDate>
      <link>https://forem.com/andersonleite/como-melhorar-seu-codigo-java-7-boas-praticas-e-padroes-de-desenvolvimento-5dgi</link>
      <guid>https://forem.com/andersonleite/como-melhorar-seu-codigo-java-7-boas-praticas-e-padroes-de-desenvolvimento-5dgi</guid>
      <description>&lt;p&gt;Uma das coisas mais comuns (ou deveria ser) quando estamos desenvolvendo um projeto é se perguntar, quais são as boas práticas de programação que devemos utilizar. Seguindo esse contexto fiz um compilado de boas práticas que costumo seguir tanto nos meus projetos pessoais quanto no ambiente profissional.&lt;br&gt;
Nas próximas linhas, vou explorar &lt;strong&gt;7 boas práticas e padrões de desenvolvimento&lt;/strong&gt; que sigo e me ajudam a escrever códigos melhores, melhorando não só a qualidade, mas também a minha produtividade e do time a qual integro.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Adote Convenções de Nomenclatura Consistentes
&lt;/h2&gt;

&lt;p&gt;A consistência é uma das chaves para manter o código organizado e fácil de entender. Seguir &lt;a href="https://napoleon.com.br/glossario/o-que-e-java-naming-conventions/" rel="noopener noreferrer"&gt;convenções de nomenclatura&lt;/a&gt; ajuda a garantir que todos no time sigam um padrão claro, evitando confusões. Em Java, as convenções mais usadas incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Classes e Interfaces&lt;/strong&gt;: utilize &lt;strong&gt;PascalCase&lt;/strong&gt; (exemplo: &lt;code&gt;Usuario&lt;/code&gt;, &lt;code&gt;Carro&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Métodos e Variáveis&lt;/strong&gt;: a convenção mais adequada aqui é o camelCase (exemplo: &lt;code&gt;calcularTotal&lt;/code&gt;, &lt;code&gt;nomeCliente&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Constantes&lt;/strong&gt;: para constantes, adote letras maiúsculas e separação por underscore (exemplo: &lt;code&gt;TAMANHO_MAXIMO&lt;/code&gt;, &lt;code&gt;VALOR_DEFAULT&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pacotes&lt;/strong&gt;: os nomes de pacotes devem ser escritos em letras minúsculas e seguir o padrão reverse domain name, ou seja, o nome do domínio invertido.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esses padrões tornam o código mais fácil de ler e compreensível para qualquer desenvolvedor que trabalhe no projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Aplique a Programação Orientada a Objetos (POO)
&lt;/h2&gt;

&lt;p&gt;A &lt;a href="https://www.devmedia.com.br/programacao-orientada-a-objetos-com-java/18449" rel="noopener noreferrer"&gt;programação orientada a objetos&lt;/a&gt; é um dos princípios fundamentais do Java, e adotar suas práticas adequadas pode fazer uma grande diferença no design do seu código. A POO permite uma melhor organização, reutilização de código e facilidade de manutenção. Algumas diretrizes incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Encapsulamento&lt;/strong&gt;: proteja os dados dentro de suas classes e permita que o acesso a esses dados seja feito apenas por meio de métodos controlados (GETs e SETs). Usar modificadores como &lt;code&gt;private&lt;/code&gt; ou &lt;code&gt;protected&lt;/code&gt; pode prevenir acessos indesejados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Herança&lt;/strong&gt;: embora útil, a herança deve ser usada com cautela para não gerar hierarquias complexas e difíceis de gerenciar. Prefira composição quando possível.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Polimorfismo&lt;/strong&gt;: facilita a troca de comportamentos de objetos em tempo de execução, o que pode ser útil para tornar seu código mais flexível.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seguir esses princípios ajuda a criar um código mais modular, o que facilita alterações e expansão no futuro.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Evite Redundância com o Princípio DRY (Don't Repeat Yourself)
&lt;/h2&gt;

&lt;p&gt;A duplicação de código pode levar a erros e dificuldades em manutenção. O &lt;a href="https://www.macoratti.net/16/04/net_dry1.htm" rel="noopener noreferrer"&gt;princípio DRY&lt;/a&gt; sugere que você deve evitar escrever o mesmo trecho de código várias vezes. Quando encontrar um padrão repetitivo, refatore-o para uma função ou classe reutilizável. Isso facilita a manutenção e reduz o risco de bugs.&lt;br&gt;
Por exemplo, se você tem um código de validação de dados que se repete em várias partes do programa, considere extrair esse código para um método único ou até uma classe específica. Isso melhora a clareza e torna o código mais fácil de refatorar futuramente.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Comentários: Quando Usar e Quando Evitar
&lt;/h2&gt;

&lt;p&gt;Comentários são uma ferramenta poderosa para explicar a lógica por trás de decisões difíceis de código, mas não devem ser usados para explicar o óbvio. Se o código é bem escrito e segue &lt;a href="https://caffeinealgorithm.com/blog/comentarios-em-java" rel="noopener noreferrer"&gt;boas práticas de nomenclatura&lt;/a&gt;, ele deve ser autoexplicativo. Utilize comentários para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Descrever decisões de design complexas.&lt;/li&gt;
&lt;li&gt;Explicar por que uma abordagem foi escolhida quando não há uma solução clara.&lt;/li&gt;
&lt;li&gt;Fornecer contexto adicional em casos que envolvem lógica complicada ou requisitos específicos.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Os comentários são importantes para explicar o "porquê" de uma decisão de código, mas não o "o quê" ou "como". -Blog: Cubos Academy&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Evite comentar simplesmente para "explicar" o que uma linha de código faz — um bom código deve ser capaz de falar por si.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Testes Automatizados: Garantindo Qualidade do Código
&lt;/h2&gt;

&lt;p&gt;Uma das melhores maneiras de garantir que seu código funcione corretamente é escrever &lt;a href="https://www.devmedia.com.br/testes-automatizados-com-junit/30324" rel="noopener noreferrer"&gt;testes automatizados&lt;/a&gt;. Eles ajudam a identificar problemas cedo, evitam regressões e melhoram a confiança na implementação. Os principais tipos de testes incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://dev.to/andersonleite/testes-unitarios-com-junit-no-java-26lf"&gt;Testes Unitários&lt;/a&gt;&lt;/strong&gt;: testam unidades isoladas de código, como métodos ou funções. Utilizar ferramentas como JUnit pode automatizar esse processo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testes de Integração&lt;/strong&gt;: avaliam a interação entre diferentes partes do sistema. São cruciais para garantir que o sistema como um todo funcione conforme o esperado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Adicionar testes automatizados ao seu fluxo de trabalho pode parecer trabalhoso no início, mas a longo prazo, aumenta a eficiência e reduz o risco de falhas no código.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Gerenciamento Eficiente de Exceções
&lt;/h2&gt;

&lt;p&gt;Lidar com exceções corretamente é crucial para garantir que seu software seja robusto e resiliente. Algumas dicas para um bom &lt;a href="https://devnit.medium.com/gerenciamento-de-exce%C3%A7%C3%B5es-em-java-e-spring-boot-melhores-pr%C3%A1ticas-a0395db28df7" rel="noopener noreferrer"&gt;gerenciamento de exceções&lt;/a&gt; incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exceções Específicas&lt;/strong&gt;: sempre que possível, lance exceções específicas em vez de utilizar Exception genéricas. Isso torna o código mais fácil de entender e depurar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evite Exceções Silenciosas&lt;/strong&gt;: nunca capture uma exceção sem tratá-la adequadamente ou, pelo menos, logar a mensagem de erro. Ignorar exceções pode esconder problemas críticos no sistema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.baeldung.com/java-try-with-resources" rel="noopener noreferrer"&gt;try-with-resources&lt;/a&gt;&lt;/strong&gt;: utilize essa abordagem ao trabalhar com recursos como arquivos e conexões de banco de dados. Ela garante que esses recursos sejam fechados automaticamente ao final do uso, evitando vazamentos de memória.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ao seguir boas práticas de tratamento de exceções, seu código se torna mais confiável e fácil de manter.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Adote Padrões de Projeto (Design Patterns)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://refactoring.guru/pt-br/design-patterns/java" rel="noopener noreferrer"&gt;Design Patterns&lt;/a&gt; são soluções comprovadas para problemas recorrentes no desenvolvimento de software. Em Java, alguns padrões clássicos que podem ajudar a estruturar seu código de forma mais eficiente incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Singleton&lt;/strong&gt;: garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a ela.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Factory&lt;/strong&gt;: permite a criação de objetos sem especificar a classe exata a ser instanciada. Isso facilita a extensão do código sem alterar as partes que dependem dessa criação.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strategy&lt;/strong&gt;: permite alterar o comportamento de um objeto em tempo de execução, sem modificar a classe que o utiliza.
Esses padrões são valiosos para garantir que seu código seja escalável, flexível e fácil de entender.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bônus: Utilize Ferramentas de Qualidade de Código em Java
&lt;/h3&gt;

&lt;p&gt;Ferramentas de qualidade de código são fundamentais para identificar problemas no código antes que eles afetem o funcionamento da aplicação. Para projetos Java, considere utilizar as seguintes ferramentas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linters&lt;/strong&gt;: analisam o estilo e a consistência do código, garantindo que ele siga as melhores práticas e convenções do Java (exemplo: Checkstyle).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analisadores Estáticos&lt;/strong&gt;: detectam potenciais erros, vulnerabilidades e problemas de desempenho sem a necessidade de execução do código (exemplo: &lt;a href="https://www.sonarqube.org/" rel="noopener noreferrer"&gt;SonarQube&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formatadores Automáticos&lt;/strong&gt;: asseguram que o código esteja sempre formatado conforme as convenções de estilo, como o padrão do Google Java (exemplo: &lt;a href="https://github.com/google/google-java-format" rel="noopener noreferrer"&gt;Google Java Format&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Referencias utilizadas&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://napoleon.com.br/glossario/o-que-e-java-naming-conventions/" rel="noopener noreferrer"&gt;https://napoleon.com.br/glossario/o-que-e-java-naming-conventions/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.devmedia.com.br/programacao-orientada-a-objetos-com-java/18449" rel="noopener noreferrer"&gt;https://www.devmedia.com.br/programacao-orientada-a-objetos-com-java/18449&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.macoratti.net/16/04/net_dry1.htm" rel="noopener noreferrer"&gt;https://www.macoratti.net/16/04/net_dry1.htm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caffeinealgorithm.com/blog/comentarios-em-java" rel="noopener noreferrer"&gt;https://caffeinealgorithm.com/blog/comentarios-em-java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.devmedia.com.br/testes-automatizados-com-junit/30324" rel="noopener noreferrer"&gt;https://www.devmedia.com.br/testes-automatizados-com-junit/30324&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.cubos.academy/java-boas-praticas-e-padroes-de-codigo/" rel="noopener noreferrer"&gt;https://blog.cubos.academy/java-boas-praticas-e-padroes-de-codigo/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.baeldung.com/java-try-with-resources" rel="noopener noreferrer"&gt;https://www.baeldung.com/java-try-with-resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devnit.medium.com/gerenciamento-de-exce%C3%A7%C3%B5es-em-java-e-spring-boot-melhores-pr%C3%A1ticas-a0395db28df7" rel="noopener noreferrer"&gt;https://devnit.medium.com/gerenciamento-de-exce%C3%A7%C3%B5es-em-java-e-spring-boot-melhores-pr%C3%A1ticas-a0395db28df7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://refactoring.guru/pt-br/design-patterns/java" rel="noopener noreferrer"&gt;https://refactoring.guru/pt-br/design-patterns/java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>designpatterns</category>
      <category>cleancode</category>
      <category>cleancoding</category>
    </item>
    <item>
      <title>Testes Unitários com JUnit no Java</title>
      <dc:creator>Anderson Leite</dc:creator>
      <pubDate>Thu, 21 Mar 2024 16:28:35 +0000</pubDate>
      <link>https://forem.com/andersonleite/testes-unitarios-com-junit-no-java-26lf</link>
      <guid>https://forem.com/andersonleite/testes-unitarios-com-junit-no-java-26lf</guid>
      <description>&lt;p&gt;Os testes unitários estão sendo cruciais no meu dia a dia no desenvolvimento de software, garantindo que cada parte do código funcione como esperado. Percebo que no contexto da programação em Java, o JUnit é uma das ferramentas mais populares para escrever e executar testes unitários. Neste post quero explorar os conceitos básicos de testes unitários com JUnit, incluindo a configuração do ambiente de teste e os métodos mais comuns encontrados em testes unitários.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Configuração do Ambiente de Teste&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Antes de começar a escrever testes, é necessário configurar o ambiente de teste. Isso geralmente envolve adicionar as dependências do JUnit ao seu projeto. Se você estiver usando Maven ou Gradle, pode adicionar a dependência do JUnit ao seu arquivo &lt;code&gt;pom.xml&lt;/code&gt; ou &lt;code&gt;build.gradle&lt;/code&gt;, respectivamente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maven&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para Maven, adicione o seguinte ao seu &lt;code&gt;pom.xml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;dependencies&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;dependency&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;junit&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;groupId&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;artifactId&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;junit&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;artifactId&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;4.13.2&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;test&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;dependency&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;dependencies&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Gradle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para Gradle, adicione a seguinte linha ao seu &lt;code&gt;build.gradle&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;dependencies&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;testImplementation&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;junit:junit:4.13.2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando se trabalha com Spring Boot, uma das vantagens é a facilidade de configuração e execução de testes unitários e de integração. O &lt;code&gt;spring-boot-starter-test&lt;/code&gt; é um starter que inclui todas as dependências necessárias para testar aplicações Spring Boot, incluindo JUnit, Mockito, AssertJ, entre outras ferramentas úteis para testes. Mas esse é assunto para outro post, que pretendo explorar um pouco mais sobre esse starter.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Escrevendo Testes Unitários&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Um teste unitário é uma função que verifica o comportamento de uma parte específica do código, como um método ou uma classe. No JUnit, os testes são escritos como métodos públicos anotados com &lt;code&gt;@Test&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplo de Teste Unitário&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aqui está um exemplo simples de um teste unitário para uma classe &lt;code&gt;Calculadora&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;junit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Test&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;junit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Assert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CalculadoraTest&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Test&lt;/span&gt;
    &lt;span class="kr"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;testSoma&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;Calculadora&lt;/span&gt; &lt;span class="nx"&gt;calculadora&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Calculadora&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nx"&gt;int&lt;/span&gt; &lt;span class="nx"&gt;resultado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;calculadora&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;soma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo, o método &lt;code&gt;testSoma&lt;/code&gt; verifica se o método &lt;code&gt;soma&lt;/code&gt; da classe &lt;code&gt;Calculadora&lt;/code&gt; retorna o valor esperado.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Métodos Comuns em Testes Unitários&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Aqui está uma lista de métodos comuns que costumo utilizar em meus testes unitários com JUnit, juntamente com uma explicação resumida de cada um:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;assertEquals(expected, actual)&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;: Verifica se dois valores são iguais. Se não forem, o teste falha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso&lt;/strong&gt;: Útil para comparar valores primitivos, objetos e arrays.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;assertTrue(condition)&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;: Verifica se uma condição é verdadeira. Se não for, o teste falha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso&lt;/strong&gt;: Útil para verificar a validade de uma expressão booleana.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;assertFalse(condition)&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;: Verifica se uma condição é falsa. Se não for, o teste falha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso&lt;/strong&gt;: Útil para verificar a invalidade de uma expressão booleana.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;assertNull(object)&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;: Verifica se um objeto é nulo. Se não for, o teste falha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso&lt;/strong&gt;: Útil para verificar se um objeto não foi inicializado.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;assertNotNull(object)&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;: Verifica se um objeto não é nulo. Se for, o teste falha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso&lt;/strong&gt;: Útil para verificar se um objeto foi inicializado corretamente.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;assertSame(expected, actual)&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;: Verifica se dois objetos são o mesmo objeto. Se não forem, o teste falha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso&lt;/strong&gt;: Útil para verificar se duas referências apontam para o mesmo objeto na memória.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;assertNotSame(expected, actual)&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;: Verifica se dois objetos não são o mesmo objeto. Se forem, o teste falha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso&lt;/strong&gt;: Útil para verificar se duas referências apontam para objetos diferentes na memória.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;assertArrayEquals(expected, actual)&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;: Verifica se dois arrays são iguais. Se não forem, o teste falha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso&lt;/strong&gt;: Útil para comparar arrays de qualquer tipo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;assertThat(actual, matcher)&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;: Verifica se um objeto atende a uma condição especificada por um matcher. Se não atender, o teste falha.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso&lt;/strong&gt;: Útil para verificações complexas e legíveis, utilizando a biblioteca Hamcrest para definir matchers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;fail(message)&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;: Faz o teste falhar imediatamente, com uma mensagem opcional.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso&lt;/strong&gt;: Útil para indicar que um teste não deve ser executado ou para indicar um erro inesperado.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;assumeTrue(condition)&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;: Ignora o teste se a condição for falsa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso&lt;/strong&gt;: Útil para evitar a execução de testes sob certas condições, como a presença de um recurso específico.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;&lt;code&gt;assumeFalse(condition)&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;: Ignora o teste se a condição for verdadeira.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso&lt;/strong&gt;: Útil para evitar a execução de testes sob certas condições, como a ausência de um recurso específico.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esses métodos são fundamentais para escrever testes unitários eficazes com JUnit, permitindo que verifiquemos o comportamento do código de maneira clara e concisa.&lt;/p&gt;

&lt;h2&gt;
  
  
  JUnit com outras ferramentas
&lt;/h2&gt;

&lt;p&gt;Eh possível integrar o JUnit com outras ferramentas de testes para ampliar a funcionalidade e a eficiência dos testes unitários. Essa integração pode ser feita de várias maneiras, dependendo das necessidades específicas do projeto e das ferramentas desejadas. Aqui estão algumas maneiras comuns de integrar o JUnit com outras ferramentas de testes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Mocking com Mockito&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mockito é uma biblioteca popular para criar e configurar objetos fictícios (mocks) em testes unitários. Ela pode ser usada em conjunto com o JUnit para isolar partes do código que estão sendo testadas, permitindo que você teste o comportamento de uma classe ou método sem depender de outras partes do sistema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Assertions com AssertJ&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AssertJ é uma biblioteca que fornece uma maneira mais legível e expressiva de escrever asserções em testes unitários. Ela pode ser usada em conjunto com o JUnit para melhorar a legibilidade e a clareza dos testes, tornando-os mais fáceis de entender e manter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Testes de Integração com Spring Test&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para aplicações Spring Boot, o &lt;code&gt;spring-boot-starter-test&lt;/code&gt; inclui o Spring Test, que fornece suporte para testes de integração e testes de controle de serviço. O Spring Test pode ser usado em conjunto com o JUnit para testar aplicações Spring Boot de maneira mais eficaz, aproveitando os recursos do Spring para configurar e executar testes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Testes de Performance com JMeter&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Embora o JMeter seja uma ferramenta separada para testes de performance, ele pode ser integrado com testes unitários escritos com JUnit para realizar testes de performance em aplicações Java. Isso permite que você teste o desempenho de suas aplicações em diferentes cenários e condições.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Testes de Interface do Usuário com Selenium&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Selenium é uma ferramenta para testes de automação de navegadores da web. Embora seja mais comumente usada para testes de interface do usuário (UI), ela pode ser integrada com testes unitários escritos com JUnit para automatizar testes de UI e verificar a funcionalidade da interface do usuário.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Testes de Controle de Versão com Git&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Embora o Git seja uma ferramenta de controle de versão e não uma ferramenta de teste, ele pode ser integrado com o processo de teste para garantir que apenas código que passa por todos os testes unitários seja commitado no repositório. Isso pode ser feito configurando o Git para executar os testes unitários antes de permitir que um commit seja feito.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusão&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Os testes unitários estão sendo fundamentais para garantir a qualidade do código e a correção de bugs dos projetos que venho desenvolvendo. O JUnit oferece uma ampla gama de métodos para verificar o comportamento do código, tornando-o uma ferramenta poderosa para testes unitários em Java. Ao escrever testes unitários, é importante cobrir todos os casos de uso possíveis para garantir que o código funcione como esperado em todas as situações.&lt;/p&gt;

&lt;h3&gt;
  
  
  Referências:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://junit.org/junit5/docs/current/user-guide/" rel="noopener noreferrer"&gt;https://junit.org/junit5/docs/current/user-guide/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.baeldung.com/junit-5" rel="noopener noreferrer"&gt;https://www.baeldung.com/junit-5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.baeldung.com/java-unit-testing-best-practices" rel="noopener noreferrer"&gt;https://www.baeldung.com/java-unit-testing-best-practices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>junit</category>
      <category>unittest</category>
      <category>java</category>
      <category>tdd</category>
    </item>
    <item>
      <title>Como instalar Docker Compose no Linux</title>
      <dc:creator>Anderson Leite</dc:creator>
      <pubDate>Mon, 12 Dec 2022 14:43:53 +0000</pubDate>
      <link>https://forem.com/andersonleite/como-instalar-docker-compose-no-linux-2iin</link>
      <guid>https://forem.com/andersonleite/como-instalar-docker-compose-no-linux-2iin</guid>
      <description>&lt;p&gt;Nesse post quero compartilhar uma maneira de instalar o Docker Compose no Linux. Mas antes de colocar a mão na massa é interessante entender o que é o Compose e como ele funciona.&lt;/p&gt;

&lt;h2&gt;
  
  
  01 O que é Compose? E como funciona?
&lt;/h2&gt;

&lt;p&gt;O Compose é uma ferramenta para definir e executar aplicativos Docker de vários contêineres. Com o Compose, você pode usar arquivos YAML para configurar os serviços do seu aplicativo. Então, com um comando, você pode criar e iniciar todos os serviços na configuração.&lt;/p&gt;

&lt;p&gt;O Compose funciona em todos os ambientes: produção, preparo, desenvolvimento, teste, bem como fluxos de trabalho de CI. Ele também possui comandos para gerenciar todo o ciclo de vida do seu aplicativo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Iniciar, parar e reconstruir serviços&lt;/li&gt;
&lt;li&gt;Exibir o status dos serviços em execução&lt;/li&gt;
&lt;li&gt;Transmita a saída de log dos serviços em execução&lt;/li&gt;
&lt;li&gt;Executar um comando único em um serviço&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  02 Principais recursos
&lt;/h2&gt;

&lt;p&gt;Os principais recursos do Compose que o tornam eficaz são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/features-uses/#have-multiple-isolated-environments-on-a-single-host" rel="noopener noreferrer"&gt;Tenha vários ambientes isolados em um único host&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/features-uses/#preserves-volume-data-when-containers-are-created" rel="noopener noreferrer"&gt;Preserva os dados do volume quando os contêineres são criados&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/features-uses/#only-recreate-containers-that-have-changed" rel="noopener noreferrer"&gt;Recrie apenas contêineres que foram alterados&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/features-uses/#supports-variables-and-moving-a-composition-between-environments" rel="noopener noreferrer"&gt;Suporta variáveis e movendo uma composição entre ambientes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  03 Confira se o Docker esta instalado na sua máquina
&lt;/h2&gt;

&lt;p&gt;Instalar a ferramenta Compose é fácil, mas primeiro certifique-se de ter o Docker instalado.&lt;/p&gt;

&lt;p&gt;Rode esse comando no seu terminal para saber se o Doceker realmente esta instalado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se não aparecer uma mensagem semelhante a esta &lt;code&gt;Docker version 20.10.21, build baeda1f&lt;/code&gt; significa que você ainda não tem o Docker instalado, nesse caso eu publiquei este post mostrando: &lt;a href="https://dev.to/andersonleite/instalacao-completa-do-docker-no-ubuntu-lts-5bpi"&gt;Instalação Completa do Docker no Ubuntu LTS&lt;/a&gt;, mas caso você esteja utilizando um sistema diferente, consulte o &lt;a href="https://docs.docker.com/engine/install/" rel="noopener noreferrer"&gt;guia oficial&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  04 Instale o Compose
&lt;/h2&gt;

&lt;p&gt;Caso esteja utilizando alguma distribuição Linux, basta realizar a instalação com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="s2"&gt;"https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;uname&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/local/bin/docker-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Os binários baixados da Internet não podem ser executados por padrão. Portanto, basta usar o programa chmod para aplicar permissões de execução (+x) ao binário que acabamos de baixar. Execute o seguinte comando em seu terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; +x /usr/local/bin/docker-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  05 Verifique a instalação
&lt;/h2&gt;

&lt;p&gt;Agora basta executar &lt;code&gt;docker-compose --version&lt;/code&gt; para verificar a instalação. Se tudo correr bem, você deverá ver a seguinte saída (ou semelhante) em seu terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;span class="c"&gt;# Docker Compose version v2.5.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você deve então ver os detalhes da versão instalada em seu terminal.&lt;/p&gt;

&lt;p&gt;Para saber mais sobre o Compose &lt;em&gt;(ou caso ocorra algum erro)&lt;/em&gt; basta consultar o &lt;em&gt;&lt;a href="https://docs.docker.com/compose/install/#install-compose" rel="noopener noreferrer"&gt;guia oficial&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Referências:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/install/#install-compose" rel="noopener noreferrer"&gt;https://docs.docker.com/compose/install/#install-compose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/engine/install/" rel="noopener noreferrer"&gt;https://docs.docker.com/engine/install/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Bônus:
&lt;/h4&gt;

&lt;p&gt;Conheça o &lt;a href="https://editordetexto.online/" rel="noopener noreferrer"&gt;Editor de Texto&lt;/a&gt;, ferramenta online para trabalhar com textos de forma rápida e eficiente.&lt;/p&gt;

</description>
      <category>testing</category>
    </item>
    <item>
      <title>Instalação Completa do Docker no Ubuntu LTS</title>
      <dc:creator>Anderson Leite</dc:creator>
      <pubDate>Fri, 02 Dec 2022 03:02:51 +0000</pubDate>
      <link>https://forem.com/andersonleite/instalacao-completa-do-docker-no-ubuntu-lts-5bpi</link>
      <guid>https://forem.com/andersonleite/instalacao-completa-do-docker-no-ubuntu-lts-5bpi</guid>
      <description>&lt;p&gt;Nesse post quero compartilhar uma maneira de instalar o Docker no Ubuntu em 8 passos simples. Que nos dará acesso à sua interface de linha de comando (CLI).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vamos aos passos&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Desinstale versões anteriores&lt;/li&gt;
&lt;li&gt;Instale as dependências iniciais&lt;/li&gt;
&lt;li&gt;Adicione a chave pública do repositório Docker em sua máquina&lt;/li&gt;
&lt;li&gt;Adicione o repositório remoto na lista do apt&lt;/li&gt;
&lt;li&gt;Instale o Docker no Linux&lt;/li&gt;
&lt;li&gt;Adicione seu usuário ao grupo de usuários Docker&lt;/li&gt;
&lt;li&gt;Inicie o Daemon do Docker&lt;/li&gt;
&lt;li&gt;Valide a instalação&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Aqui, vamos fazer a instalação do Docker por meio do comando &lt;code&gt;apt-get&lt;/code&gt;, considerando uma máquina com &lt;a href="https://ubuntu.com/download/desktop" rel="noopener noreferrer"&gt;Ubuntu LTS&lt;/a&gt; 64-bit (amd64).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Se quiser ver as outras opções de instalação ou se estiver usando outro sistema operacional, consulte a &lt;a href="https://docs.docker.com/engine/install/" rel="noopener noreferrer"&gt;documentação completa&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;⚠️ Se você enfrentar algum problema ou comportamento diferente em algum dos passos, consulte o &lt;a href="https://docs.docker.com/engine/install/ubuntu/" rel="noopener noreferrer"&gt;guia oficial&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passo 1: Desinstale versões anteriores
&lt;/h2&gt;

&lt;p&gt;Se você já possui uma versão do Docker instalada em sua máquina e deseja refazer o processo para atualizar ou corrigir um problema, primeiro remova os pacotes da versão que está na sua máquina. &lt;/p&gt;

&lt;p&gt;Para fazer isso, use o seguinte comando no terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get remove docker&lt;span class="k"&gt;*&lt;/span&gt; containerd runc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se nenhum dos pacotes estiver instalado, este comando retornará o erro &lt;code&gt;E: Impossível encontrar o &amp;lt;nome-do-pacote&amp;gt;&lt;/code&gt;. Neste caso, é só prosseguir com a instalação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passo 2: Instale as dependências iniciais
&lt;/h2&gt;

&lt;p&gt;Para permitir que o &lt;code&gt;apt-get&lt;/code&gt; busque arquivos por &lt;em&gt;HTTPS&lt;/em&gt;, instale os seguintes pacotes. Precisamos deles para prosseguir com a instalação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
apt-transport-https &lt;span class="se"&gt;\&lt;/span&gt;
ca-certificates &lt;span class="se"&gt;\&lt;/span&gt;
curl &lt;span class="se"&gt;\&lt;/span&gt;
gnupg &lt;span class="se"&gt;\&lt;/span&gt;
lsb-release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Passo 3: Adicione a chave pública do repositório Docker em sua máquina
&lt;/h2&gt;

&lt;p&gt;Para adicionar a chave oficial GPG* do repositório Docker, execute o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/share/keyrings/docker-archive-keyring.gpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ Essa etapa é necessária porque precisamos obter uma chave pública do servidor Docker Inc para garantir que todos os pacotes de dados obtidos da Internet sejam assinados com essa chave, evitando assim possíveis ataques à segurança.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Se tudo correr bem, você não terá nenhum feedback visual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passo 4: Adicione o repositório remoto na lista do &lt;code&gt;apt&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Para finalmente adicionar o repositório oficial do Docker no &lt;code&gt;apt&lt;/code&gt;, execute o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s2"&gt;"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsb_release &lt;span class="nt"&gt;-cs&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; stable"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
| &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/docker.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Observe que adicionamos o repositório &lt;em&gt;stable&lt;/em&gt; (em &lt;code&gt;$(lsb_release -cs) stable&lt;/code&gt;), isto significa que teremos somente o repositório com as versões estáveis do Docker.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Em distribuições baseadas no Ubuntu, como o Linux Mint, pode ser necessário substituir o comando &lt;code&gt;$(lsb_release -cs)&lt;/code&gt; por uma versão do Ubuntu compatível com esse sistema. &lt;br&gt;
Exemplo: se você estiver usando o &lt;em&gt;Linux Mint Tessa&lt;/em&gt;, altere o valor para &lt;code&gt;bionic&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Observação importante: não é garantido que o Docker seja executado em sistemas que não atendam aos &lt;a href="https://docs.docker.com/engine/install/ubuntu/#os-requirements" rel="noopener noreferrer"&gt;requisitos do sistema operacional&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Passo 5: Instale o Docker no Linux
&lt;/h2&gt;

&lt;p&gt;Agora, sim, vamos à instalação do Docker!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primeiro, vamos garantir que os índices dos pacotes do &lt;code&gt;apt&lt;/code&gt; estão atualizados, já que adicionamos um novo repositório:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Entao vamos instalar a última versão estável do &lt;em&gt;Docker Engine - Community&lt;/em&gt;, que é uma versão mantida pela própria comunidade, já que o Docker é &lt;em&gt;open source&lt;/em&gt;. Para isso, execute no terminal:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;docker-ce docker-ce-cli containerd.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Passo 6: Adicione seu usuário ao grupo de usuários Docker
&lt;/h2&gt;

&lt;p&gt;Para evitar o uso de &lt;code&gt;sudo&lt;/code&gt; em todos os comandos Docker que formos executar, vamos dar as devidas permissões ao nosso usuário.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primeiro crie um grupo chamado &lt;code&gt;docker&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;groupadd docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;Caso apareça uma mensagem: &lt;code&gt;groupadd: grupo 'docker' já existe&lt;/code&gt;, é só prosseguir.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Em seguida, adicione seu usuário a este novo grupo com o seguinte comando:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;⚠️ Atenção execute o comando exatamente como acima, com distinção entre maiúsculas e minúsculas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Para ativar as alterações no grupo, você pode sair e fazer login novamente em sua sessão ou executar o seguinte comando no terminal:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;newgrp docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;⚠️ Se você encontrar algum problema após executar este comando, reinicie seu dispositivo. Prossiga para a próxima etapa após reiniciar&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Passo 7: Inicie o Daemon do Docker
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;Daemon&lt;/strong&gt; é um serviço que fica no &lt;em&gt;background&lt;/em&gt;, ou seja, é um serviço que sempre está em execução e aguarda por comandos feitos por meio do CLI. Entretanto, para que este serviço fique sempre disponível, precisamos &lt;strong&gt;ativá-lo&lt;/strong&gt;, até mesmo após reiniciarmos nosso computador.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para consultar o &lt;code&gt;status&lt;/code&gt; atual do &lt;strong&gt;daemon&lt;/strong&gt; do Docker, execute o seguinte comando:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;O comando acima deve retornar um pequeno relatório sobre o serviço, incluindo seu &lt;em&gt;status&lt;/em&gt; de execução:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;● docker.service - Docker Application Container Engine
     Loaded: loaded &lt;span class="o"&gt;(&lt;/span&gt;/lib/systemd/system/docker.service&lt;span class="p"&gt;;&lt;/span&gt; enabled&lt;span class="p"&gt;;&lt;/span&gt; vendor preset: enabled&lt;span class="o"&gt;)&lt;/span&gt;
     Active: inactive &lt;span class="o"&gt;(&lt;/span&gt;dead&lt;span class="o"&gt;)&lt;/span&gt; since Thu 2022-11-23 19:35:27 &lt;span class="nt"&gt;-03&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 2s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
    Process: 2034 &lt;span class="nv"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/bin/dockerd &lt;span class="nt"&gt;-H&lt;/span&gt; fd:// &lt;span class="nt"&gt;--containerd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/run/containerd/containerd.sock &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;exited, &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&amp;gt;
   Main PID: 2034 &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;exited, &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0/SUCCESS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Caso o parâmetro &lt;em&gt;Active&lt;/em&gt; esteja como &lt;code&gt;stop/waiting&lt;/code&gt; ou, no nosso caso, como &lt;code&gt;inactive&lt;/code&gt;, rode o comando &lt;code&gt;start&lt;/code&gt; para iniciá-lo:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Quando o &lt;code&gt;status&lt;/code&gt; for consultado novamente, o processo deve estar como &lt;code&gt;start/running/active&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agora, vamos habilitar o daemon do Docker para iniciar durante o &lt;em&gt;boot&lt;/em&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Passo 8: Valide a instalação
&lt;/h2&gt;

&lt;p&gt;Para validar se tudo ocorreu como deveria na instalação, vamos executar o &lt;code&gt;hello world&lt;/code&gt; do Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O terminal deve retornar uma mensagem conforme o &lt;em&gt;gif&lt;/em&gt; a seguir:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9cm3sbzc93z35clo7v4.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9cm3sbzc93z35clo7v4.gif" alt="Hello from Docker" width="734" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tudo certo, temos o Docker instalado para utilizarmos! 🐋&lt;/p&gt;

&lt;h3&gt;
  
  
  Referências:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/engine/install/" rel="noopener noreferrer"&gt;https://docs.docker.com/engine/install/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/engine/install/ubuntu/" rel="noopener noreferrer"&gt;https://docs.docker.com/engine/install/ubuntu/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/engine/install/ubuntu/#os-requirements" rel="noopener noreferrer"&gt;https://docs.docker.com/engine/install/ubuntu/#os-requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.betrybe.com/tecnologia/docker/" rel="noopener noreferrer"&gt;https://blog.betrybe.com/tecnologia/docker/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>docker</category>
      <category>ubuntu</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
