Mockito всегда возвращает null в результате вызова EJB - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь вызвать второй метод этого класса и всегда получаю null. Обратите внимание, что он возвращает new User(), однако в тестовом классе я всегда получаю null:

@Stateless
public class UserDAO2 {

    public Connection getConnFromPool(int i) {
        return null;
    }

    public User readByUserid(String s) {
        System.out.println("In DAO 2");
        Connection c = getConnFromPool(1);
        return new User();
    }
}

И тестовый класс:

@RunWith(MockitoJUnitRunner.class)
public class UserBeanUnitTest {

    @InjectMocks
    private UserDAO2 dao2;

    @Before
    public void setup() {
        dao2 = Mockito.mock(UserDAO2.class);
        MockitoAnnotations.initMocks(this);
    }


    @Test
    public void testBean() {

        Mockito.when(dao2.getConnFromPool(1)).thenReturn(null);

        User expectedUser = new User();
        expectedUser.setSk(1);
        expectedUser.setFirstName("David");
        expectedUser.setLastName("Gahan");
        expectedUser.setUserid("user1");

        User user = dao2.readByUserid("user1"); // <-- this method always returns null

        assertThat(user).isEqualTo(expectedUser); // <-- test fails as expectedUser != null

    }

}

Также обратите внимание, что System.out.println никогда не печатается. Как это исправить, чтобы действительно позвонить на dao.readByUserid()?

1 Ответ

1 голос
/ 10 апреля 2020

Если вам нужно протестировать метод некоторого класса, и внутри него вызывается другой метод того же класса, который вы хотите смоделировать, то вам нужно использовать @Spy:

@RunWith(MockitoJUnitRunner.class)
public class UserDAO2Test {

    @InjectMocks
    @Spy
    private UserDAO2 dao;

    @Test
    public void testBean() {

        Mockito.doReturn(null).when(dao).getConnFromPool(1);

        User expectedUser = new User();
        expectedUser.setSk(1);
        expectedUser.setFirstName("David");
        expectedUser.setLastName("Gahan");
        expectedUser.setUserid("user1");

        User user = dao.readByUserid("user1");

        assertThat(user).isEqualTo(expectedUser);
    }
}

Обратите внимание, что я немного изменил строку с насмешкой getConnFromPool, потому что это требуется при использовании этой техники.

См. документы для шпионажа.

...