Atividade 1 – Testes Unitários e o Stack Overflow

Discente: Adriel Luiz Santana Dos Santos
Docente: Glauco de Figueiredo Carneiro

1. A Pergunta 1

1.1. Nome, link e informações 1

1.2. Conteúdo e Interpretação 1

2. A Resposta 2

2.1. Conteúdo 2

2.2. Porque foi a escolhida 3

2.3. Outras respostas 3

3. Etapas para replicar os códigos do problema e da solução 6

3.1. Etapa de configuração do ambiente 6

3.2. Etapa do problema 7

3.3. Etapa da resposta 7

4. Links Importantes 8

4.1. Link do repositório 8

4.2. Link deste documento 8

4.3. Link do vídeo 8

4.4. Link da pergunta 8

4.5. Link da subpergunta 9

  1. A Pergunta {#a-pergunta}

    1. Nome, link e informações {#nome,-link-e-informações}

      O nome da pergunta é “Mocking static methods with Mockito” e se encontra no site que pode ser acessado clicando aqui, ou copiando o link no final deste documento. A pergunta tem 519 votos e a resposta dada como correta tem 419 votos.

    2. Conteúdo e Interpretação {#conteúdo-e-interpretação}

      A pergunta contém também o código ao qual surgiu a dúvida e pela minha interpretação do problema, o autor da pergunta estava querendo a informação de como “mockar” um método estático na biblioteca chamada Mockito do Java, pois ele estava tentando fazer isso com um método que estabelecia uma conexão com uma database porém não sabia por onde começar pois a biblioteca não dava suporte para esse tipo de mock na época. Podemos ver a pergunta e seu conteúdo na imagem a seguir:

  1. A Resposta {#a-resposta}

    1. Conteúdo {#conteúdo}

    A resposta escolhida como correta sugere, de forma direta, a opção de utilizar o PowerMockito, uma biblioteca que dá a possibilidade de “mockar” métodos estáticos para biblioteca chamada Mockito. Podemos ver a resposta e seu conteúdo na imagem a seguir:

  1. Porque foi a escolhida {#porque-foi-a-escolhida}

    Observando outras respostas com mais conteúdo e mais novas, se infere que aquela resposta foi escolhida porque foi a que solucionou o problema do autor naquele momento, ou seja, ela foi a resposta que mais rapidamente solucionou o problema do autor de forma simples e generalista e, além disso, o autor daquela resposta auxilia em outra pergunta mais específica sobre esse mesmo tema e no mesmo espaço de tempo, praticamente uma subpergunta dessa.

    1. Outras respostas {#outras-respostas}

    Tivemos as mais diversas outras respostas, citarei algumas delas a seguir:

    Uma delas também deu a mesma resposta que a resposta correta, porém ela não explica nada e apenas envia para outro link, algo que foi denunciado por um comentário nessa própria resposta, como podemos ver a seguir:

Em outra resposta mais recente, outra pessoa indica que o mockito já suporta o mock em métodos estáticos e explica como fazer, podemos ver isso na imagem a seguir:

Em outra resposta, a pessoa somente nega a possibilidade de fazer o mock pela biblioteca chamada Mockito e não apresenta nenhuma solução alternativa, como podemos ver na imagem a seguir:

Existem também resposta que trazem métodos alternativos, como a criação de Wrappers para não precisar mockar os métodos estáticos nos testes, como podemos ver na imagem a seguir:

E como último exemplo de resposta, temos respostas que referenciam a resposta correta e trazem alguns ajustes para caso ela não funcione, como podemos ver na imagem abaixo:

  1. Etapas para replicar os códigos do problema e da solução {#etapas-para-replicar-os-códigos-do-problema-e-da-solução}

    1. Etapa de configuração do ambiente {#etapa-de-configuração-do-ambiente}

    A etapa de configuração do ambiente foi um grande desafio, pois a pergunta é de 10 anos atrás(2014), então para replicar tanto o problema quanto a solução tive que pesquisar as versões daquela época tanto da linguagem utilizada quanto das bibliotecas utilizadas.

    A IDE utilizada por mim para o Java foi o Eclipse e por fim utilizei o maven para baixar as bibliotecas do problema e da solução.

    As bibliotecas utilizadas para a replicação da solução foram o Mockito, o JUnit4 e o PowerMockito.

    1. Etapa do problema {#etapa-do-problema}

    O problema utiliza o DriverManager.getConnection para estabelecer uma conexão com uma database, praticamente tive apenas que copiar e colar a pergunta para replicar ela, com a diferença que tive que procurar quais foram os imports utilizados já que o autor não os colocou na pergunta e, além disso, tive que tentar replicar a interface que foi criada pelo autor. No final a replicação da pergunta e interface criadas por mim, respectivamente, ficaram assim:


  1. Etapa da resposta {#etapa-da-resposta}

    Para a resposta foi algo mais complicado, pois o conteúdo do código é algo dado como exemplo e genérico, ou seja, algo mais teórico. Podemos identificar isso por uma linha de código escrita pelo autor, nela temos “sut.execute(); // System Under Test (sut)” essa linha de código tem o objetivo de demonstrar onde deve se colocar os códigos para a testagem de outros métodos, classes e funções que precisam do mock que foi criado. Encontrei uma solução mais específica para o problema na subpergunta do autor que foi respondida pelo mesmo autor da resposta correta, e assim o código final da solução ficou assim:

  1. Links Importantes {#links-importantes}

    1. Link do repositório {#link-do-repositório}

    https://github.com/Draraedus/Teste_Software_2024_santos_adriel

    1. Link deste documento {#link-deste-documento}

    https://docs.google.com/document/d/1t00C5s3GTgs8h9IKRB9Mjpt4jZeu-Er5pZg025vU9cs/edit?usp=sharing

    1. Link do vídeo {#link-do-vídeo}

    https://drive.google.com/file/d/1-UOQY542dJIkNmv_aV8CeyxEWivZ5WtS/view?usp=sharing

    1. Link da pergunta {#link-da-pergunta}

    https://stackoverflow.com/questions/21105403/mocking-static-methods-with-mockito

    1. Link da subpergunta {#link-da-subpergunta}

    https://stackoverflow.com/questions/21128690/mocking-static-methods-with-powermock-and-mockito