对多个测试用例使用相同的断言方法



我想用其他测试用例重复使用测试方法,因为它们共享相同的功能,但使用不同的参数。在下面的代码中,annualSalaryperiodPortion将有所不同。我的问题是,是否有一种方法可以重用下面的其他测试用例以避免在其他测试方法中重复代码?

避免重复代码?
       int actualTaxResult = IncomeTax.GetIncomeTax(annualSalary, _periodPortion);
        //int expectedTaxAmount = 922; 
       if (actualTaxResult != expectedTaxAmount)
       {
        Assert.Fail(String.Format("Expected tax amount: {0}, but actual result is {1}", expectedTaxAmount, actualTaxResult));
       }

值得一提的两件事:

  1. 当然,使用参数化测试是正常的
  2. 最好的方法是使用适当的测试框架,该框架本地支持参数化测试(Xunit.net,Nunit(

例如,使用Xunit您可以做:

[Theory]
[InlineData(100000, 10, 10000)]
[InlineData(150000, 15, 12000)]
[InlineData(210000, 2, 2450)]
public void IncomeTax_Specs(int annualSalary, int periodPortion, int expectedTaxAmount)
{
    int actualTaxResult = IncomeTax.GetIncomeTax(annualSalary, periodPortion);
    Assert.Equal(actualTaxResult, expectedTaxAmount);
}

为什么不将该代码块包裹在单独的辅助方法中,然后将其用于以下不同的测试用例。但是您可以根据需要更改方法签名,但是传达的目的是使用助手方法

private bool CheckData(int annualSalary, int _periodPortion, int expectedTaxAmount)
{
       int actualTaxResult = IncomeTax.GetIncomeTax(annualSalary, _periodPortion);
       return (actualTaxResult == expectedTaxAmount)
}

然后,在您的测试方法中,您可以说

   if (!CheckData(40000,6,300))
   {
    Assert.Fail(String.Format("Expected tax amount: {0}, but actual result is {1}", expectedTaxAmount, actualTaxResult));
   }

初始答案助手方法根据您的评论

private void CheckData(int annualSalary, int _periodPortion, int expectedTaxAmount)
{
   int actualTaxResult = IncomeTax.GetIncomeTax(annualSalary, _periodPortion);
   if (actualTaxResult != expectedTaxAmount)
   {
    Assert.Fail(String.Format("Expected tax amount: {0}, but actual result is {1}", expectedTaxAmount, actualTaxResult));
   }
}

最新更新