簡體   English   中英

由於調用 EJB,Mockito 總是返回 null

[英]Mockito always returns null as a result of calling an EJB

我試圖調用這個 class 的第二種方法,並且總是得到null 請注意,它返回new User()但是在測試 class 我總是得到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();
    }
}

以及測試 class:

@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()

如果您需要測試某些 class 的方法,並且在其中調用您要模擬的相同 class 的其他方法,那么您需要使用@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);
    }
}

請注意,我使用 mocking getConnFromPool稍微修改了該行,因為使用該技術時需要它。

請參閱docs進行間諜活動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM