我应该如何为这个问题编写测试?

时间:2019-05-25 19:29:42

标签: testing bdd

我想为此培训编写TDD / BDD测试。该问题的场景是:

  

对于每个高于$ 50的购物篮,总折扣的2%将作为折扣

     

对于每个高于$ 100的购物篮,总折扣的5%将作为折扣

所以我写了这些测试(使用茉莉花):

describe("discount", function () {    
    describe("When total price calculated", function () {
        it("Should get 4% discount if it is more than $100", function () {
            let total = 110;
            expect(checkout.calcDiscountBiggerThan100(total)).toBe(total / 0.04);
        });
        it("Sould get 2% discount if it is more than $50 and less than $100", function () {
            let total = 70;
            expect(checkout.calcDiscountBetween50And100(total)).toBe(total % 0.02);
        })
        it("Sould calc no discount if it less than $50", function () {
            let total = 45;
            expect(checkout.calcDiscountBetween50And100(total)).toBe(0);
        })
    });    
});

但是当我想为他们编写代码时,我不知道该怎么办! 如果我想这样写:

class checkout{
    calcDiscount(total) {
        if (total > 100)
            return total * 0.04
        if (total > 50)
            return total * 0.02
        return 0;
    }
}

然后我在这里有2个问题。

  1. 我不关注我的情况
  2. 如何在此处遵循打开/关闭原则(我的课程应该是什么)

如果我想参加考试,我将有:

calcDiscountBiggerThan100(total) {
    if (total > 100)
        return total * 0.04
}
calcDiscountBetween50And100(total) {
    if (total > 50)
        return total * 0.02
}

这又是一个问题,我应该如何针对开放式/封闭式原理对其进行重构。

请注意,可以将$ 100更改为$ 120。并且可能是其他规则添加到这些规则中。那我应该有一个名为DiscountBetween50And100的类吗?

我是测试新手。请帮助我

0 个答案:

没有答案