[英]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.