针对不同月薪需要缴纳不同的个人所得税计算程序,结合边界值分析法和等价类划分方法,设计充分的测试用例。运用JUnit的Parametrized运行器实现10组不同测试数据的测试实例,请给出测试的源代码,测试类名称为:TestTax。 个税计算表如下:
时间: 2024-04-06 17:29:46 浏览: 399
假设个人所得税的计算公式如下:
1. 对于月薪不超过5000元的人员,个人所得税为月薪的5%;
2. 对于月薪在5000元到10000元之间的人员,个人所得税为月薪的10%;
3. 对于月薪在10000元到20000元之间的人员,个人所得税为月薪的15%;
4. 对于月薪在20000元到40000元之间的人员,个人所得税为月薪的20%;
5. 对于月薪超过40000元的人员,个人所得税为月薪的25%。
根据边界值分析法和等价类划分方法,我们可以得到以下测试用例:
|月薪|期望个人所得税|
|---|---|
|-1|无效输入|
|0|0|
|1|0.05|
|4999|249.95|
|5000|500|
|5001|500.1|
|9999|999.9|
|10000|1000|
|10001|1500.15|
|19999|2999.85|
|20000|4000|
|20001|4400.2|
|39999|7999.8|
|40000|8000|
|40001|10000.25|
|50000|12500|
根据上述测试用例,我们可以编写如下的测试代码:
```java
import static org.junit.Assert.*;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class TestTax {
private int salary;
private double expectedTax;
public TestTax(int salary, double expectedTax) {
this.salary = salary;
this.expectedTax = expectedTax;
}
@Parameters
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] {
{ -1, -1 }, { 0, 0 }, { 1, 0.05 }, { 4999, 249.95 },
{ 5000, 500 }, { 5001, 500.1 }, { 9999, 999.9 }, { 10000, 1000 },
{ 10001, 1500.15 }, { 19999, 2999.85 }, { 20000, 4000 }, { 20001, 4400.2 },
{ 39999, 7999.8 }, { 40000, 8000 }, { 40001, 10000.25 }, { 50000, 12500 }
});
}
@Test
public void testTax() {
if (salary < 0) {
assertEquals(-1, expectedTax, 0.001);
} else {
double actualTax = calculateTax(salary);
assertEquals(expectedTax, actualTax, 0.001);
}
}
private double calculateTax(int salary) {
double tax = 0;
if (salary > 0 && salary <= 5000) {
tax = salary * 0.05;
} else if (salary > 5000 && salary <= 10000) {
tax = salary * 0.1;
} else if (salary > 10000 && salary <= 20000) {
tax = salary * 0.15;
} else if (salary > 20000 && salary <= 40000) {
tax = salary * 0.2;
} else if (salary > 40000) {
tax = salary * 0.25;
} else {
// salary <= 0
return -1;
}
return tax;
}
}
```
以上代码中,我们使用了JUnit的Parametrized运行器来运行多组测试数据。通过`@Parameters`注解,我们可以指定测试数据集合,它是一个二维数组,每一行表示一组测试数据。在测试方法中,我们首先判断月薪是否小于0,如果是则期望返回-1,表示无效输入;否则计算个人所得税,然后使用`assertEquals()`方法来断言计算得到的税额与期望值是否相等。
阅读全文