Unit testing 单元测试的正确方法

Unit testing 单元测试的正确方法,unit-testing,Unit Testing,在过去的几周里,我一直在练习单元测试,但我不确定我的测试方法是否正确 我尝试测试的系统在实时系统上看起来如下所示: 数量 单位净价 净总额 销售税@20% 总数 我用以下数据填充了字段: 数量=6 单位净售价=22.00 总净额=132.00 销售税@20%=26.40 总数=158 我使用assertEquals创建了一个单元测试,它通过了: public void testTaxCalculation3() throws Exception{ floa

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

我尝试测试的系统在实时系统上看起来如下所示:

  • 数量
  • 单位净价
  • 净总额
  • 销售税@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);
    }

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

您必须将税务计算逻辑封装在一个方法中,然后在该方法上编写单元测试(或者更好,先编写测试,然后再编写方法)

在您的情况下,您应该有如下内容:

// 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);
}

看起来您目前正在测试测试代码本身,这将为您带来最小的好处。单元测试是一种可以用来快速测试生产代码片段的技术。使用这种技术,您不只是将“真实”代码复制粘贴到测试中,而是从测试代码调用生产逻辑。这样,无论何时生产代码中发生更改,测试都将失败,并将通知您,生产代码中的更改违反了您在测试中编码的某些假设


总而言之:不要将计算复制到测试中,而是调用单元测试中的实际代码,并验证生产代码是否正确计算了总价。

谢谢TAMTAM,这有助于我更好地理解我的想法Hanks prgmtc,这有助于我理解哪里出了问题