正确的单元测试方法

时间:2015-03-09 15:55:50

标签: unit-testing

过去几周我一直在练习单元测试,但我不确定我是否正在测试正确的方法。

我正在尝试测试的系统在实时系统上看起来像这样:

  • 数量
  • 单位净销售价格
  • 净总计
  • 销售税@ 20%

我用以下数据填充了字段:

  • 数量= 6
  • 单位净销售价格= 22.00
  • 净总数= 132.00
  • 销售税@ 20%= 26.40
  • 总计= 158

我使用传递的assertEquals创建了一个单元测试:

    public void testTaxCalculation3() throws Exception{
            float quantity = 6;
            float netSalePrice = 22.00f;
            float taxPercent = 20.00f;

            float totalNetPrice = netSalePrice * quantity; //6 multiply 22 = 132.0
            float taxAmount = (totalNetPrice * taxPercent) / 100; //132.00 multiply by 20 = 2640 divided by 100 = 26.4
            float totalPrice;
        totalPrice = totalNetPrice + taxAmount; //132 plus 26.4

        Assert.assertEquals((float) 158.40, totalPrice);
    }

这是编写单元测试的正确方法吗?

2 个答案:

答案 0 :(得分:2)

你必须将税收计算逻辑封装在一个方法中,然后在该方法上编写一个单元测试(甚至更好 - 首先编写测试,然后再编写方法)。

在你的情况下,你应该有这样的事情:

// Your tax method
float TaxCalculation(float quantity, float netSalePrice, float taxPercent)
{
  float totalNetPrice = netSalePrice * quantity; 
  float taxAmount = (totalNetPrice * taxPercent) / 100; 
  float totalPrice = totalNetPrice + taxAmount;
  return totalPrice;
}

// Your tax method test
// I'm assuming NUnit here
[Test]
[TestCase(6, 22.00, 20.00, 158.40)]
public void TaxCalculation(float quantity, float netSalePrice, float taxPercent, float expectedTotalPrice)
{
  float totalPrice = TaxCalculation(quantity, netSalePrice, taxPercent);
  Assert.AreEqual(totalPrice, expectedTotalPrice);
}

答案 1 :(得分:0)

您好像正在测试测试代码本身,它将为您提供最小的好处。单元测试是一种可用于快速测试生产代码的技术。使用这种技术,您不必复制粘贴"真实"代码进入测试,而是从测试代码中调用生产逻辑。这样,只要生产代码中的某些内容发生变化,测试就会失败并通知您,您在测试中编写的某些假设会因生产代码中的更改而受到侵犯。

回顾一下:不要将计算复制到测试中,而是从单元测试中调用实际代码,并验证生产代码是否正确计算总价格。