针对不同月薪需要缴纳不同的个人所得税计算程序,结合边界值分析法和等价类划分方法,设计充分的测试用例。运用JUnit的Parametrized运行器实现10组不同测试数据的测试实例,请给出测试的源代码,测试类名称为:TestTax。 个税计算表如下:
时间: 2024-03-18 11:44:17 浏览: 176
假设个人所得税的计算规则如下:
- 月薪不超过3000元,免征个人所得税;
- 月薪超过3000元至5000元(含5000元),应缴纳月薪超过3000元部分的5%作为个人所得税;
- 月薪超过5000元至10000元(含10000元),应缴纳月薪超过5000元部分的10%加上200元作为个人所得税;
- 月薪超过10000元至20000元(含20000元),应缴纳月薪超过10000元部分的15%加上1200元作为个人所得税;
- 月薪超过20000元至40000元(含40000元),应缴纳月薪超过20000元部分的20%加上5200元作为个人所得税;
- 月薪超过40000元至60000元(含60000元),应缴纳月薪超过40000元部分的25%加上14200元作为个人所得税;
- 月薪超过60000元,应缴纳月薪超过60000元部分的30%加上24200元作为个人所得税。
根据边界值分析法和等价类划分方法,我们可以设计以下测试用例:
| 月薪 | 个人所得税 |
| ------- | ---------- |
| -1 | 报错 |
| 0 | 0 |
| 1 | 0 |
| 3000 | 0 |
| 3001 | 0.05 * 1 |
| 5000 | 0.05 * 200 |
| 5001 | 0.1 * 1 + 200 |
| 10000 | 0.1 * 5000 - 200 + 200 |
| 10001 | 0.15 * 1 + 1200 |
| 20000 | 0.15 * 10000 + 1200 |
| 20001 | 0.2 * 1 + 5200 |
| 40000 | 0.2 * 20000 + 5200 |
| 40001 | 0.25 * 1 + 14200 |
| 60000 | 0.25 * 20000 + 14200 |
| 60001 | 0.3 * 1 + 24200 |
| 100000 | 0.3 * 40000 + 24200 |
下面是实现这些测试用例的JUnit测试代码:
```java
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class TestTax {
private int salary;
private double expectedTax;
public TestTax(int salary, double expectedTax) {
this.salary = salary;
this.expectedTax = expectedTax;
}
@Parameterized.Parameters
public static Collection<Object[]> data() {
Object[][] data = new Object[][]{
{-1, -1}, {0, 0},
{1, 0}, {3000, 0},
{3001, 0.05 * 1}, {5000, 0.05 * 200},
{5001, 0.1 * 1 + 200},
{10000, 0.1 * 5000 - 200 + 200},
{10001, 0.15 * 1 + 1200},
{20000, 0.15 * 10000 + 1200},
{20001, 0.2 * 1 + 5200},
{40000, 0.2 * 20000 + 5200},
{40001, 0.25 * 1 + 14200},
{60000, 0.25 * 20000 + 14200},
{60001, 0.3 * 1 + 24200},
{100000, 0.3 * 40000 + 24200}
};
return Arrays.asList(data);
}
@Test
public void testCalculateTax() {
double actualTax = calculateTax(salary);
assertEquals(expectedTax, actualTax, 0.001);
}
private double calculateTax(int salary) {
double tax = 0;
if (salary > 60000) {
tax += (salary - 60000) * 0.3 + 24200;
salary = 60000;
}
if (salary > 40000) {
tax += (salary - 40000) * 0.25 + 14200;
salary = 40000;
}
if (salary > 20000) {
tax += (salary - 20000) * 0.2 + 5200;
salary = 20000;
}
if (salary > 10000) {
tax += (salary - 10000) * 0.15 + 1200;
salary = 10000;
}
if (salary > 5000) {
tax += (salary - 5000) * 0.1 + 200;
salary = 5000;
}
if (salary > 3000) {
tax += (salary - 3000) * 0.05;
}
return tax;
}
}
```
阅读全文