gpt4 book ai didi

java - Java EE (JPA) 中的 Junit 测试

转载 作者:行者123 更新时间:2023-11-30 08:05:50 25 4
gpt4 key购买 nike

我正在使用(EJB、JPA 和 JPQL)在 JAVA EE 中创建一个简单的 Web 应用程序。我想知道如何使用 mockito 测试模型来测试 EJB。我想模拟上下文(数据库和属性)

我该怎么做?

@Mock
private EntityManager mockedEntityManager;
private static TendererBean tendererBean;
private static TendererManagerBean tendererManagerBean;
private static EJBContainer container;
final Properties p = new Properties();
p.put("jdbc/Mydatabase", "new://Resource?type=DataSource");
p.put("jdbc/Mydatabase.JdbcDriver", "apache_derby_net");
p.put("jdbc/Mydatabase.JdbcUrl", "jdbc:derby://localhost:1527/Mydatabase");
container = EJBContainer.createEJBContainer(p);
final Context context = container.getContext();
tendererBean = (TendererBean) context.lookup("java:global/classesTendererManagerBean");

最佳答案

Alex is right, you should not need database connections in a unit test (unless you trying to create an integration test) You can try mocking them like this. The code may be messy, hope it helps

public class ChargeServiceTest {

@InjectMocks
private ChargeService chargeService;

@Mock
private EntityManager entityManager;

@Mock
private Query query;
@Mock
private Biller biller;
@Mock
private Client client;

private String expectedSqlQuery1 = "Select count(c) from ClientContractCharge c where c.clientContract.biller =?1 and c.recurringInvoice = true and c.clientContract.client = ?2 and (c.dateCreated >= ?3 or c.dateLastUpdated >= ?3) order by c.dateCreated ASC";

@Before
public void before() {
chargeService = new ChargeService();
MockitoAnnotations.initMocks(this);
}

@Test
public void listCountTest1() {
when(entityManager.createQuery(expectedSqlQuery1)).thenReturn(query);
when(query.getSingleResult()).thenReturn((long) 10);
Long count = chargeService.listCount(biller, client);
verify(query).setParameter(1, biller);
assertEquals(count, Long.valueOf(10));
}
}

服务等级

@Stateless
@LocalBean public class ChargeService {
public long listCount(Biller biller, Client client) {

StringBuilder s = new StringBuilder();
s.append("Select count(c) from ClientContractCharge c where c.clientContract.biller =?1 and c.recurringInvoice = true ");
if (client != null) {
s.append("and c.clientContract.client = ?2 ");
}
s.append(" order by c.dateCreated ASC");
Query q = em.createQuery(s.toString());
q.setParameter(1, biller);
if (client != null) {
q.setParameter(2, client);
}

return (long) (Long) q.getSingleResult();
}

关于java - Java EE (JPA) 中的 Junit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34786673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com