过去几周我一直在练习单元测试,但我不确定我是否正在测试正确的方法。
我正在尝试测试的系统在实时系统上看起来像这样:
我用以下数据填充了字段:
我使用传递的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);
}
这是编写单元测试的正确方法吗?
答案 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)
您好像正在测试测试代码本身,它将为您提供最小的好处。单元测试是一种可用于快速测试生产代码的技术。使用这种技术,您不必复制粘贴"真实"代码进入测试,而是从测试代码中调用生产逻辑。这样,只要生产代码中的某些内容发生变化,测试就会失败并通知您,您在测试中编写的某些假设会因生产代码中的更改而受到侵犯。
回顾一下:不要将计算复制到测试中,而是从单元测试中调用实际代码,并验证生产代码是否正确计算总价格。