【发布时间】:2018-11-13 04:24:01
【问题描述】:
以下是我的测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/ds-context.xml")
@WebAppConfiguration
public class PaidListTest {
@Autowired
PaymentService paymentService;
@Test
public void getPaidList() {
List<PaymentGetServiceDO> response = null;
try {
response = paymentService.setPaidStatusList();
if(response != null && response.size() > 0){
for(int i = 0; i < response.size(); i++){
assertNotNull(response.get(i).getAgentcode());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
在服务调用的DAO层paymentService.setPaidStatusList()有一些数据库活动的保存和更新操作,比如em.merge(renewalPoliciesDO);
但我不想执行它们在调用测试方法时,只有在调用实际业务逻辑时才需要调用它们。
如何在此处限制或回滚数据库事务?
服务和DAO方法在这里很繁琐。不过,我已经简化了它们供您参考。
服务方法
if(!updateList.isEmpty()){
HashMap<String,String> recordset = new HashMap<String,String>();
recordset = paymentDAO.setRenewalStatus(updateList);
}
DAO 实施
if(paymentUpdateResDO.getPaymentstatus().equalsIgnoreCase("MANUAL") &&
!responseUpdateStatus.getPolicystatusid().equals(renewedStatusId)){
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Integer> payQuery = criteriaBuilder.createQuery(Integer.class);
Root<PaymentStatusDO> payRoot = payQuery.from(PaymentStatusDO.class);
payQuery.multiselect(payRoot.get("paymentstatusid"));
payQuery.where(criteriaBuilder.equal(payRoot.get("paymentstatusdescription"), "Manual"));
Integer paymentStatusId = em.createQuery(payQuery).getSingleResult();
insertOldPolicy(responseUpdateStatus);
responseUpdateStatus.setNewpolicyno(paymentUpdateResDO.getNewpolicyno());
responseUpdateStatus.setPreviousstatusid(responseUpdateStatus.getPolicystatusid());
responseUpdateStatus.setPolicystatusid(renewedStatusId);
Timestamp modifiedDate = new Timestamp(System.currentTimeMillis());
responseUpdateStatus.setModifieddatetime(modifiedDate);
responseUpdateStatus.setModifiedby("RPA");
responseUpdateStatus.setPaymentstatusid(paymentStatusId);
responseUpdateStatus.setActiveindicator("Y");
em.merge(responseUpdateStatus);
successRecords++;
}
就我而言,我需要结果数组列表,但需要忽略 em.merge 和 em.persist 活动。
当我尝试将MockitoJUnitRunner 用作@GauravRai1512 首选时,我执行了我的测试用例,但程序被终止,因此我无法获得结果ArrayLists。
参考这张图片
【问题讨论】:
-
你已经写了 assertNotNull(response.get(i).getAgentcode()) 这个所以它只会给你成功和失败。它不会给你任何价值,因为 junit 用于测试你的代码逻辑行为。
-
我应该删除 assertNotNull() 以运行我的方法吗?我也试过了。但它仍然终止。
标签: java hibernate junit testcase