使用JUnitParams进行参数化的JUnit测试

本文介绍了如何使用JUnitParams库进行参数化的单元测试,通过对比JUnit的参数化方式,阐述了JUnitParams的易用性和灵活性。示例中展示了在扑克骰子得分计算场景下,如何使用JUnitParams测试不同条件下的得分情况。
摘要由CSDN通过智能技术生成

参数化的单元测试用于在不同条件下测试相同的代码。 借助参数化的单元测试,我们可以建立一种测试方法,该方法从某些数据源中检索数据。 该数据源可以是测试数据对象,外部文件甚至数据库的集合。 一般的想法是使使用相同的单元测试方法测试不同的条件变得容易,这将限制我们需要编写的源代码并使测试代码更健壮。 我们可以将这些测试称为数据驱动的单元测试。 junit-logo

在JUnit中实现数据驱动的单元测试的最佳方法是使用JUnit的自定义运行器- ParameterizedJUnitParams的 JUnitParamsRunner 。 使用JUnit的方法可能在许多情况下都可行,但是后者似乎更易于使用且功能更强大。

基本例子

在我们的示例中,一个扑克骰子,我们需要计算满屋的得分。 就像纸牌扑克一样,“满座”是一副掷骰子,您同时拥有3个和一对。 为了简单起见,分数是一卷中所有骰子的总和。 因此,让我们看一下代码:

class FullHouse implements Scoreable {

    @Override
    public Score getScore(Collection dice) {
        Score pairScore = Scorables.pair().getScore(dice);
        Score threeOfAKindScore = Scorables.threeOfAKind().getScore(pairScore.getReminder());
        if (bothAreGreaterThanZero(pairScore.getValue(), threeOfAKindScore.getValue())) {
            return new Score(pairScore.getValue() + threeOfAKindScore.getValue()); // no reminder
        }
        return new Score(0, dice);
    }

    private boolean bothAreGreaterThanZero(int value1, int value2) {
        return value1 > 0 && value2 > 0;
    }
}

我想确保该掷骰正确得分(当然我已经对Pair和ThreeOfAKind进行了单元测试)。 因此,我想测试以下条件:

  • 分数是11:1、1、3、3、3
  • 2、2、2、1、1的得分是8
  • 分数是0代表:2、3、4、1、1
  • 分数是25,表示:5、5、5、5、5

让我们研究为该方法编写数据驱动的测试的两种可能方法。 首先, JUnit的参数化

@RunWith(Parameterized
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值