首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用Cucumber JVM/JUnit加载数据库

如何使用Cucumber JVM/JUnit加载数据库
EN

Stack Overflow用户
提问于 2012-08-07 15:36:08
回答 2查看 2.5K关注 0票数 0

我想对黄瓜jvm使用一个特性文件,它将保存用于测试的数据。

  • 我正在测试一种在处理之前使用hibernate加载对象的方法。 公共交易getDealById(Long dealId) { Deal = template.get(Deal.class,dealId);BigDecimal totalAmount =新BigDecimal();//循环处理与此交易相关的所有贷款,以将(Loan tempLoan: deal.loanList) {//从每笔贷款中相加的金额相加,包括BigDecimal totalAmount = totalAmount + tempLoan.amount;}//设置交易对象deal.setTotalAmount(TotalAmount)的总额值;返回协议};

既然我必须指定一个dealId来加载,那么我该如何处理加载呢?

我的理解是,我需要“模拟”由模拟连接产生的连接和对象。

我分别看过Jmock,mockito和dbunit,但是我不知道该怎么做。

如有任何意见,我将不胜感激。

编辑注释

我添加了更多的代码,我们从数据库中检索一个对象。接下来,我们将遍历与交易相关的对象列表(多到一个),并将每笔贷款的金额添加到交易金额中。最后,我们确定了交易总额,然后才归还这笔交易。

那么,考虑到我想从一个特性文件中提供测试信息,我如何为这个方法编写一个Junit测试呢?

在一个“真实”的情况下,这是可行的,我们在我们的应用程序加载交易,并添加每个贷款的贷款金额,并将其设置到交易,然后返回它。但是我不明白如何为这个测试编写一个JUnit,因为我们必须从这个方法中的数据库中加载。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-07 19:22:15

将逻辑重构到您的Deal类中,您根本不需要模拟数据库。另外,它更好的OO设计。

代码语言:javascript
代码运行次数:0
运行
复制
public Deal getDealById(Long dealId) {
   return template.get(Deal.class, dealId);
}

public class Deal {
   public BigDecimal recalculateTotalLoanAmount() {
      BigDecimal totalAmount = new BigDecimal();
      for (Loan tempLoan: deal.loanList)
         totalAmount = totalAmount + tempLoan.amount;
      setTotalAmount(totalAmount);
      return totalAmount;
   }
}
票数 1
EN

Stack Overflow用户

发布于 2012-08-09 15:12:46

我同意Garrett的回答,你应该重构你的代码。然而,你在你的评论中指出,重构“对我来说不是一种选择”。考虑到这一点,另一种解决方案是使用数据库而不是模拟数据库。

有许多嵌入式内存数据库可以作为单元测试的一部分使用(例如,HSQLDB、H2、Apache )。您可以在文件中定义数据库架构,以便动态创建数据库。您还可以使用测试数据预加载数据库表,这样您的测试就不必创建它了。内存中的数据库加载非常快.

我强烈建议您使用Java,这是一个像春天这样的框架,它具有方便的配置,可以在几行XML中为您运行这种类型的设置。但是,考虑到您不能重构您的代码,这可能不是一个选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11849338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档