CodeGym /Cursos /All lectures for PT purposes /Cenários populares para trabalhar com Mockito

Cenários populares para trabalhar com Mockito

All lectures for PT purposes
Nível 1 , Lição 327
Disponível

6.1 Zombando do método estático mockStatic()

E mais um ponto importante é a simulação e verificação de métodos estáticos. “O que há de errado com isso?”, você pergunta. Sim, estático, mas os métodos são os mesmos. E você estará errado.

Lembra onde começamos a aprender sobre objetos fictícios? Como esses objetos são criados artificialmente por meio do arquivo DynamicProxy. E os métodos estáticos não estão vinculados a nenhum objeto e DynamicProxyé impossível interceptar chamadas para eles por meio de . Isso é tudo.

Mas os criadores do Mockito também conseguiram se esquivar aqui - eles escreveram seu próprio carregador de classes e, com sua ajuda, foram capazes de substituir as classes em tempo real. Um trabalho grande e difícil, mas eles ainda conseguiram fazê-lo.

Você precisará adicionar uma biblioteca adicional para pom.xml:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-inline</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

Veja como trabalhar se você precisar zombar de um método estático.

1 Crie um objeto de classe mock especial:

MockedStatic<ClassName>managerObject = Mockito.mockStatic(ClassName.class);

2 Adicione regras de operação a este objeto:

A este objeto da regra é preciso se apegar de outras formas.

managerObject.when(ClassName::method name).thenReturn(result);

3 Certifique-se de envolver o uso deste objetotry-with-resources para que o objeto seja excluído imediatamente e o Mockito possa limpar as regras associadas a ele.

Exemplo:

@Test
void givenStaticMethodWithNoArgs () {
    try (MockedStatic< StaticUtils> utilities =  Mockito.mockStatic( StaticUtils.class)) {
        // add rule
  utilities.when(StaticUtils::name).thenReturn("Hello");

        // check if the rule works
        assertEquals("Hello", StaticUtils.name());
    }
}

Não tão bonito quanto com anotações @Mocke @Spy, mas muito prático. Era muito difícil escrever testes quando era impossível zombar de um método estático simples que era usado dentro dos métodos em teste.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION