繁体   English   中英

无法模拟EntityManager jMockit

[英]Can't mock EntityManager jMockit

我在尝试使用jMockit在测试中模拟EntityManager时遇到了一些麻烦。

我有这个基类:

public abstract class BaseEntityManager {

    @PersistenceContext private EntityManager entityManager;

    protected EntityManager getEntityManager(){
         return entityManager;
    }
}

还有一个扩展它的类:

@Stateless
public class PlayerManager extends BaseEntityManager{

    public Collection<PlayerDTO> getPlayersByDraftClass(int draftClass){
        EntityManager em = getEntityManager();
        Query query = em.createNamedQuery("Player.findByDraftClass", Player.class);
        query.setParameter("draftClass", draftClass);
        List<Player> players =  query.getResultList();
        return convertPlayersToPlayerDTOs(players);
    }
    ...some other methods
}

在我的测试中,我有:

public class PlayerManagerTest {

    @Injectable EntityManager em;
    @Tested PlayerManager pm;

    @Test
    public void testGetPlayersByDraftClass_PlayersReturned() throws FYPException{

        final List<Player> players = new ArrayList();
        players.add(createBasicPlayer(PLAYER_1_ID, PLAYER_1_NAME, PLAYER_1_POSITION));
        players.add(createBasicPlayer(PLAYER_2_ID, PLAYER_2_NAME, PLAYER_2_POSITION));

        new NonStrictExpectations(){
            @Mocked TypedQuery playerQuery;
            {   
                em.createNamedQuery(anyString, Player.class);
                result = playerQuery;

                playerQuery.getResultList();
                result = players;
            }
        };

        final ArrayList<PlayerDTO> result = (ArrayList<PlayerDTO>)pm.getPlayersByDraftClass(TEST_YEAR);

        new Verifications(){{
            assertNotNull("The list of players should not be null", result);
            assertFalse("The list should not be empty", result.isEmpty());
            assertEquals("The number of dtos returned should match the query result", players.size(), result.size());
            assertDTOsMatchEntities(players, result);
        }};

    }
    ...some other tests and helper methods
}

我在playerQuery.getResultList()行上收到一个空指针异常,因此我假设playerQuery从未被初始化,因为它没有像以往那样注册em.createNamedQuery(anyString, Player.class)

我什至尝试将EntityManager移到PlayerManager类中,因此消除了调用getEntityManager()的需要,但是它仍然抛出相同的null指针。

@Mocked TypedQuery playerQuery本地字段作为模拟参数移动到测试方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM