Cookie Consent by Free Privacy Policy Generator Aktuallisiere deine Cookie Einstellungen 📌 Testando das trincheiras: Como criar mocks e stubs dinâmico com mockito em java


📚 Testando das trincheiras: Como criar mocks e stubs dinâmico com mockito em java


💡 Newskategorie: Programmierung
🔗 Quelle: dev.to

Esse vai ser curtinho. Hoje eu estava tentando testar uma classe que segue o seguinte comportamento:

Book book = bookManager.getBook(id);
book.getId();

Por vários motivos que não vêm ao caso agora, imagine que você não consegue construir o objeto BookManager e também não consegue criar um FakeBook para injetar o ID conforme você deseja.

Pois bem, eu lembrei que era possível criar um mock dinâmico usando Answer do Mockito.

Solução: Um mock dinâmico

A solução fica assim:

@ExtendWith(MockitoExtension.class)
public class MyBookManagerTest {

@Mock 
private BookManager bookManager;
@Mock 
private Book book;

    @Test
    public void testMyMethod() {
        // Define the behavior of the bookManager mock
        when(bookManager.getBook(anyInt())).thenAnswer(new Answer<Book>() {
            @Override
            public Book answer(InvocationOnMock invocation) throws Throwable {
                Object[] args = invocation.getArguments();
                int id = (Integer) args[0];
                when(book.getId()).thenReturn(id);
                return book;
            }
        });
        // Use the mock in the test
        Book book = bookManager.getBook(12345);
        // Verify the behavior of the mock
        assertEquals(12345, book.getId());
    }
}

Note que, ao definirmos o comportamento do BookManager, retornamos uma Answer. Nessa Answer, capturamos o parâmetro passado (veja como usamos a invocation) e o configuramos no mock Book para ser retornado quando fizermos a chamada book.getId().

Dessa forma, em vez de definirmos o mock diversas vezes, podemos definir apenas uma vez e fazer várias chamadas:

// Use the mock in the test
        Book book = bookManager.getBook(12345);
        // Verify the behavior of the mock
        assertEquals(12345, book.getId());

// Esse aqui também funciona porque o nosso mock é configurável
        Book book = bookManager.getBook(6789);
        // Verify the behavior of the mock
        assertEquals(6789, book.getId());

Simplificando: Java 8 + Lambdas 🥰

Se usarmos lambdas em vez da anonymous classe, o nosso exemplo fica ainda mais simples:

        when(bookManager.getBook(anyInt()))
.thenAnswer(invocation -> {
            int id = invocation.getArgument(0);
            when(book.getId()).thenReturn(id);
            return book;
        });

É isso, essa foi direto das trincheiras. Normalmente, eu gosto de evitar mocks se possível e tento usar os objetos reais. No meu caso específico criar o objeto ia ser um trampo do cão e aí eu decidi usar a ferramenta pra simplicar a minha vida.

Keep coding! 💻

...



📌 Testando das trincheiras: Como criar mocks e stubs dinâmico com mockito em java


📈 223.51 Punkte

📌 Testando das trincheiras: Usando um "clock" fixo


📈 66.33 Punkte

📌 Mocks vs Stubs 🤼


📈 49 Punkte

📌 Como criar um Servidor Web Java Sem Framework


📈 44.73 Punkte

📌 Como criar e hospedar um site de documentação para o seu projeto usando Hugo e Netlify


📈 38.71 Punkte

📌 Como criar um GIF em qualquer Mac da maneira certa


📈 38.71 Punkte

📌 Como criar requisição de Crud Básico em Javascript usando Fetch API


📈 38.71 Punkte

📌 Como criar um bot do discord com javascript


📈 38.71 Punkte

📌 Como criar um emulador de jogos


📈 38.71 Punkte

📌 Como criar uma conta gratuita no Microsoft Azure


📈 38.71 Punkte

📌 Demystifying Static Mocking With Mockito


📈 32.43 Punkte

📌 BankNext Case Study: JUnit Mockito Automation


📈 32.43 Punkte

📌 Microfrontend: Registro dinâmico de componentes (module federation)


📈 31.02 Punkte

📌 Aumente as Conversões na Black Friday: Estratégia ASO & Ícone Dinâmico no React Native


📈 31.02 Punkte

📌 Arbol dinámico


📈 31.02 Punkte

📌 Testando sistemas distribuídos: Fundamentos, conceitos e glossário


📈 29.95 Punkte

📌 Golden Test: Testando suas Páginas (Parte 1)


📈 29.95 Punkte

📌 IA e Augmentation: ecco come i CIO stanno testando la nuova collaborazione tra persone e algoritmi


📈 29.95 Punkte

📌 Como funciona um Load Balance e como implementar utilizando Nginx.


📈 28.08 Punkte

📌 O passo a passo de como criei meu portfólio e como você pode fazer o mesmo


📈 28.08 Punkte

📌 Oracle Exec Mocks Google Arguments About Java's APIs


📈 27.79 Punkte

📌 Google Chrome RegExp Stubs Out-Of-Bounds Access


📈 27.22 Punkte

📌 [dos] Google Chrome - Out-of-Bounds Access in RegExp Stubs


📈 27.22 Punkte

📌 ghidra-pyi-generator: Automatically generate .pyi typing stubs for Ghidra's Jython API


📈 27.22 Punkte

📌 Simplifying jest stubs using jest-when


📈 27.22 Punkte

📌 [20180801] - Hardening the InputFilter for PHAR stubs


📈 27.22 Punkte

📌 Stubs/fakes(casting as a particular object)


📈 27.22 Punkte

📌 1-Click to Generating Server Stubs& Client SDKs from API Spec


📈 27.22 Punkte

📌 Comment on Infographic : What does SOC 2 Report Include? by Criar conta pessoal


📈 24.68 Punkte

📌 Utilizando o CustomPaint para criar assinatura.


📈 24.68 Punkte

📌 3 dicas para criar uma estratégia moderna de Testes para Microsserviços Spring Boot


📈 24.68 Punkte

📌 Criar massa de dados para teste


📈 24.68 Punkte

📌 O que me motivou a criar uma plataforma de negociação em criptomoedas


📈 24.68 Punkte

📌 CURSO DE DESENVOLVIMENTO ANDROID – APRENDA A CRIAR 15 APPS


📈 24.68 Punkte











matomo