Вернуть ожидаемый список значений в тесте - PullRequest
0 голосов
/ 18 июня 2020

Это фиктивный код с тестом (junit5 + mockito). Как заставить возвращать ожидаемый список значений в модульном тесте? Я пытаюсь использовать spy (), mock (), но не получаю ожидаемого значения или иногда получаю исключение с нулевым указателем.

class A {
}

public interface B {
    public List<A> f1();
}

class X {
    B o1;
    public X(B y) {
        o1 = y;
    }

    protected void x() {
        List<A> results = m1();
        // ...
    }
    protected List<A> m1() {
        return o1.f1();
    }
}

class XTest {
    @Mock
    private static B b;

    @BeforeAll
    public static void setUp() {
        b = org.mockito.Mockito.mock(B.class);
    }

    @Test
    public void t1() {
        X s = spy(new X(b));

        A p = new A();
        A r = new A();
        List<A> c = Arrays.asList(p, r);
        when(s.m1()).thenReturn(c);         // how to enforce m1() to return c ?
    }
}

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вы тестируете класс X и для этого издеваетесь над классом B. Никогда не издевайтесь над классом, который хотите протестировать:

class XTest {

    private static B b;

    @BeforeAll
    public static void setUp() {
        b = org.mockito.Mockito.mock(B.class);
    }

    @Test
    public void t1() {
        X s = new X(b);

        A p = new A();
        A r = new A();
        List<A> c = Arrays.asList(p, r);
        when(b.f1()).thenReturn(c);         //  m1() calls f1 and returns c 
    }
}
1 голос
/ 18 июня 2020

Попробуйте использовать doReturn, например:

public class XTest {

    @Mock
    private B b;

    @Test
    public void t1() {
        X s = spy(new X(b));
        List<A> list = Arrays.asList(new A(), new A());
        doReturn(list).when(s).m1();

        //
        doSomething
    }
}
...