Java.Mockito

build.gradle.kts

...
    testImplementation("org.mockito:mockito-junit-jupiter:5.7.0")
    testImplementation("org.mockito:mockito-inline:5.2.0")
...

seconnd one lib is for static methods

Examples

package com.example.main.example;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

import static org.mockito.ArgumentMatchers.anyInt;

@ExtendWith(MockitoExtension.class)
public class AppStateTestWithMockito {

    @Mock
    List virtualMockList;

    @Test
    public void mockitoVirtualObject() {
        virtualMockList.add("one");
        virtualMockList.add("two");
        Assertions.assertTrue(virtualMockList.size() == 0); // true
//        Assertions.assertTrue(virtualMockList.size() > 1); // false
        Mockito.when(virtualMockList.size()).thenReturn(10);
        Assertions.assertTrue(virtualMockList.size() > 1); // false
    }


    @Test
    public void mockitoWhenThenReturn() {
        virtualMockList.add("one");
        virtualMockList.add("two");

        // equivalent mocks
        Mockito.doReturn(10).when(virtualMockList).size();
        Mockito.when(virtualMockList.size()).thenReturn(10);

        Assertions.assertTrue(virtualMockList.size() > 1); // false
    }

    @Test
    public void throwTest() {
        // equivalents
        //        Mockito.doThrow(new RuntimeException()).when(virtualMockList).size();
        Mockito.when(virtualMockList.size()).thenThrow(new RuntimeException());
        Assertions.assertThrows(RuntimeException.class, () -> {
            virtualMockList.size();
        });
    }

    @Test
    public void callWithParams() {
        Mockito.doReturn("myValue").when(virtualMockList).get(10);
        Assertions.assertEquals("myValue", virtualMockList.get(10));
    }

    @Test
    void anyValue() {
        // equivalents
        // Mockito.doReturn("myValue").when(virtualMockList).get(any(int.class));
        Mockito.doReturn("myValue").when(virtualMockList).get(anyInt());

        Assertions.assertEquals("myValue", virtualMockList.get(10));
        Assertions.assertEquals("myValue", virtualMockList.get(11));
        Assertions.assertEquals("myValue", virtualMockList.get(12));
    }

    @Test
    void doAnswerExample() {
        Mockito.doAnswer(invocation -> {
            int arg = invocation.getArgument(0);
            return arg * arg;
        }).when(virtualMockList).get(anyInt());

        Assertions.assertEquals(100, virtualMockList.get(10));
    }

    @Test
    void verifyExample() {
        var value = virtualMockList.get(10);
        Mockito.verify(virtualMockList, Mockito.times(1)).get(10);
    }

    @Test
    void verifyNoMoreInteractions() {
        Mockito.verifyNoMoreInteractions(virtualMockList);
    }

    @Test
    void verifyOrder() {
        virtualMockList.get(10);
        virtualMockList.size();
        var inOrder = Mockito.inOrder(virtualMockList);
        inOrder.verify(virtualMockList).get(10);
        inOrder.verify(virtualMockList).size();
    }

    @Test
    public void spyRedirection() {

        List list = new LinkedList(); // works with LinkedList, but doesn't work with ArrayList
        List spy = Mockito.spy(list);

        //optionally, you can stub out some methods:
//        Mockito.when(spy.size()).thenReturn(100);

        //using the spy calls real methods
        spy.add("one");
        spy.add("two");

        //prints "one" - the first element of a list
        System.out.println(spy.get(0));

        //size() method was stubbed - 100 is printed
        System.out.println(spy.size());
    }

    @Test
    public void spyRedirection2() {

        List spyMockitoList2 = Mockito.spy(new ArrayList());

        spyMockitoList2.add("one");
        spyMockitoList2.add("two");

        Assertions.assertTrue(spyMockitoList2.size() > 0); // false
    }

    @Test
    void staticMethod() {
        try (MockedStatic<UtilsExample> utils = Mockito.mockStatic(UtilsExample.class)) {
            utils.when(UtilsExample::doSmth).thenReturn("hi, from static method");
            Assertions.assertEquals("hi, from static method", UtilsExample.doSmth());
        }
    }
}

class UtilsExample {
    static String doSmth() {
        return "static";
    }

}
This entry was posted in Без рубрики. Bookmark the permalink.