java - 如何将我的税率数组应用于我的 junit 测试用例?
问题描述
这段代码检查薪水并应用税率,我有一些必须应用的新逻辑,但我必须保持值,因为它们必须通过我的 JUnit 测试。我现在通过了一些测试用例。
我要应用的逻辑
from:
float rate = 0, r1 = 0 ,r2 = 0;
int i = 0;
to
System.out.println("Total Paid: " + totalPaid);
到我的其余代码,但只需要一点方向或提示
package edu.citytech.taxes.service;
import gov.irs.marignal.taxrate.ICalculate;
import gov.irs.marignal.taxrate.Status;
import static gov.irs.marignal.taxrate.Status.SINGLE;
import java.util.Arrays;
import static gov.irs.marignal.taxrate.Status.MARRIED;
import static gov.irs.marignal.taxrate.Status.HEAD_OF_HOUSE_HOLD;
public class MarginalTax implements ICalculate {
float rate = 0, r1 = 0 ,r2 = 0;
// change 9_700 to 9_000 to match test case
TaxRate[] taxRateForAll = {
new TaxRate(rate = .10f, r1 = 9_000, r2 = 0, SINGLE)
,new TaxRate(rate = .12f, r1 = 39475, r2 = 9_000, SINGLE)
,new TaxRate(rate = .22f, r1 = 84200, r2 = 39475, SINGLE)
,new TaxRate(rate = .24f, r1 = 160725, r2 = 84200, SINGLE)
,new TaxRate(rate = .32f, r1 = 204100, r2 = 160725, SINGLE)
,new TaxRate(rate = .35f, r1 = 510300, r2 = 204100, SINGLE)
,new TaxRate(rate = .37f, r1 = 999999999, r2 = 510300, SINGLE)
,new TaxRate(rate = .10f, r1 = 19400, r2 = 0, MARRIED)
,new TaxRate(rate = .12f, r1 = 78950, r2 = 19400, MARRIED)
,new TaxRate(rate = .22f, r1 = 168400, r2 = 78950, MARRIED)
,new TaxRate(rate = .24f, r1 = 321450, r2 = 168400, MARRIED)
,new TaxRate(rate = .32f, r1 = 408200, r2 = 321450, MARRIED)
,new TaxRate(rate = .35f, r1 = 612350, r2 = 408200, MARRIED)
,new TaxRate(rate = .37f, r1 = 999999999, r2 = 612350, MARRIED)
,new TaxRate(rate = .10f, r1 = 13850, r2 = 0, HEAD_OF_HOUSE_HOLD)
,new TaxRate(rate = .12f, r1 = 52850, r2 = 13850, HEAD_OF_HOUSE_HOLD)
,new TaxRate(rate = .22f, r1 = 84200, r2 = 52850, HEAD_OF_HOUSE_HOLD)
,new TaxRate(rate = .24f, r1 = 160000, r2 = 84200, HEAD_OF_HOUSE_HOLD)
,new TaxRate(rate = .32f, r1 = 204100, r2 = 160000, HEAD_OF_HOUSE_HOLD)
,new TaxRate(rate = .35f, r1 = 510300, r2 = 204100, HEAD_OF_HOUSE_HOLD)
,new TaxRate(rate = .37f, r1 = 999999999, r2 = 510300, HEAD_OF_HOUSE_HOLD)
};
@Override
public float getTaxRate(Status status, int year, float salary) {
float taxPaid = 0f;
int i = 0;
TaxRate [] taxRate = Arrays.stream(taxRateForAll)
.filter(m -> m.status == status.SINGLE)
.toArray(TaxRate[]::new);
while(salary > taxRate[i].r1){
taxPaid = (taxRate[i].r1 - taxRate[i].r2) * taxRate[i].rate;
taxRate[i].taxPaid = taxPaid;
System.out.println(taxRate[i]);
i++;
}
taxPaid = (salary - taxRate[i].r2) * taxRate[i].rate;
taxRate[i].taxPaid = taxPaid;
double totalPaid = Arrays.stream(taxRate)
.filter(f -> f.taxPaid != 0)
.mapToDouble(m -> m.taxPaid)
.sum();
//Original Logic//////////////////////////////////////////
if (status == Status.SINGLE && year == 2019 && salary <= 9_700) {
taxPaid = salary * .10f;
}
// 12% Bracket: ($39,475 - $9,700) x 12% = $3573
if (status == Status.SINGLE && year == 2019 && salary > 9700 && salary <= 39_475) {
float salaryDifference = salary - 9_700;
taxPaid = 970f + (salaryDifference * .12f);
}
// 22% Bracket: ($84,200 - $39,475) x 22% = $9,839.00
if (status == Status.SINGLE && year == 2019 && salary > 39_475 && salary <= 84_200) {
float salaryDifference = salary - 39_475;
taxPaid = 3_573.00f + 970f + (salaryDifference * .22f);
}
// 24% Bracket: ($160,725 - $84,200) x 24& = $18,366.00
if (status == Status.SINGLE && year == 2019 && salary > 84_200 && salary <= 160_725) {
float salaryDifference = salary - 84_200;
taxPaid = 9_839.50f + 3_573.00f + 970f + (salaryDifference * .24f);
}
// 32% Bracket: ($204,100 - $160,725) x 32& = $13,880.00
if (status == Status.SINGLE && year == 2019 && salary > 160_725 && salary <= 204_100) {
float salaryDifference = salary - 160_725;
taxPaid = 18_366.00f + 9_839.50f + 3_573.00f + 970f + (salaryDifference * .32f);
}
// 35% Bracket: ($510,300 - $204,100) x 35& = $107170
if (status == Status.SINGLE && year == 2019 && salary > 204_100 && salary <= 510_300) {
float salaryDifference = salary - 204_100;
taxPaid = 13_880.00f + 18_366.00f + 9_839.50f + 3_573.00f + 970f + (salaryDifference * .35f);
}
// 37% Bracket: ($) x 37& = ??
if (status == Status.SINGLE && year == 2019 && salary > 510_300) {
float salaryDifference = salary - 510_300;
taxPaid = 107_170.00f + 13_880.00f + 18_366.00f + 9_839.50f + 3_573.00f + 970f + (salaryDifference * .37f);
}
// 10% = 19400 - 0 * 10% = 1940
if (status == Status.MARRIED && year == 2019 && salary <= 19_400) {
taxPaid = salary * .10f;
}
// 12% Bracket: ($78,950 - $19,400) x 12% = $7,146
if (status == Status.MARRIED && year == 2019 && salary > 19_400 && salary <= 78_950) {
float salaryDifference = salary - 19_400;
taxPaid = 1_940.00f + (salaryDifference * .12f);
}
// 22% Bracket: ($168,400 - $78,950) x 22% = $19,679.00
if (status == Status.MARRIED && year == 2019 && salary > 78_950 && salary <= 168_400) {
float salaryDifference = salary - 78_950;
taxPaid = 7_146.00f + 1_940.00f + (salaryDifference * .22f);
}
// 24% Bracket: ($321,450 - $168,400) x 24% = $36,732 + 28735
if (status == Status.MARRIED && year == 2019 && salary > 168_400 && salary <= 321_450) {
float salaryDifference = salary - 168_400;
taxPaid = 19_679.00f + 7_146.00f + 1_940.00f + (salaryDifference * .24f);
}
// 32% Bracket: ($408,200 - $321,450) x 32% = $27760
if (status == Status.MARRIED && year == 2019 && salary > 321_450 && salary <= 408_200) {
float salaryDifference = salary - 321_450;
taxPaid = 36_732.00f + 19_679.00f + 7_146.00f + 1_940.00f + (salaryDifference * .32f);
}
// 35% Bracket: ($612_350 - $408,200) x 35% = $71_452.5
if (status == Status.MARRIED && year == 2019 && salary > 408_200 && salary <= 612_350) {
float salaryDifference = salary - 408_200;
taxPaid = 27_760.00f + 36_732.00f + 19_679.00f + 7_146.00f + 1_940.00f + (salaryDifference * .35f);
}
// 37% Bracket: (??? - $612_350) x 37% = ??? 164_709.5
if (status == Status.MARRIED && year == 2019 && salary > 612_350) {
float salaryDifference = salary - 612_350;
taxPaid = 71_452.50f + 27_760.00f + 36_732.00f + 19_679.00f + 7_146.00f + 1_940.00f
+ (salaryDifference * .37f);
}
// 10% = 13_850 - 0 * 10% = 1385
if (status == Status.HEAD_OF_HOUSE_HOLD && year == 2019 && salary <= 13_850) {
taxPaid = salary * .10f;
}
// 12% = 52_850 - 13_850 * 12% = 4680
if (status == Status.HEAD_OF_HOUSE_HOLD && year == 2019 && salary > 13_850 && salary <= 52_850) {
float salaryDifference = salary - 13_850;
taxPaid = 1_385.00f + (salaryDifference * .12f);
}
// 22% = 84_200 - 52_850 * 22% = 6897
if (status == Status.HEAD_OF_HOUSE_HOLD && year == 2019 && salary > 52_850 && salary <= 84_200) {
float salaryDifference = salary - 52_850;
taxPaid = 4_680.00f + 1_385.00f + (salaryDifference * .22f);
}
// 24% = 160_000 - 84_200 * 24% = 18192
if (status == Status.HEAD_OF_HOUSE_HOLD && year == 2019 && salary > 84_200 && salary <= 160_000) {
float salaryDifference = salary - 84_200;
taxPaid = 6_897.00f + 4_680.00f + 1_385.00f + (salaryDifference * .24f);
}
// 32% = 204_100 - 160_000 * 32% = 14112
if (status == Status.HEAD_OF_HOUSE_HOLD && year == 2019 && salary > 160_000 && salary <= 204_100) {
float salaryDifference = salary - 160_000;
taxPaid = 18_192.00f + 6_897.00f + 4_680.00f + 1_385.00f + (salaryDifference * .32f);
}
// 35% = 510_300 - 204_100 * 35% = 107170
if (status == Status.HEAD_OF_HOUSE_HOLD && year == 2019 && salary > 204_100 && salary <= 510_300) {
float salaryDifference = salary - 204_100;
taxPaid = 14_112.00f + 18_192.00f + 6_897.00f + 4_680.00f + 1_385.00f + (salaryDifference * .35f);
}
// 37% = ??? - 510_300 * 37% = ??? 152_436 +
if (status == Status.HEAD_OF_HOUSE_HOLD && year == 2019 && salary > 510_300) {
float salaryDifference = salary - 510_300;
taxPaid = 107_170.00f + 14_112.00f + 18_192.00f + 6_897.00f + 4_680.00f + 1_385.00f
+ (salaryDifference * .37f);
}
//return taxPaid;
/////////////////////////////////////////////
return (float)totalPaid;
}
}
这是我的税率等级
package edu.citytech.taxes.service;
import gov.irs.marignal.taxrate.Status;
public class TaxRate {
public final float rate;
public final float r1;
public final float r2;
public final Status status;
public float taxPaid;
/**
*
* @param rate
* @param r1
* @param r2
* @param status
*/
public TaxRate(float rate, float r1, float r2, Status status) {
super();
this.rate = rate;
this.r1 = r1;
this.r2 = r2;
this.status = status;
}
@Override
public String toString() {
return "TaxRate [rate=" + rate + ", r1=" + r1 + ", r2=" + r2 + ", status=" + status + ", taxPaid=" + taxPaid
+ "]";
}
}
这些是正在实现的类
package gov.irs.marignal.taxrate;
public interface ICalculate {
float getTaxRate(Status status, int year, float salary);
}
package gov.irs.marignal.taxrate;
public enum Status {
MARRIED, SINGLE, HEAD_OF_HOUSE_HOLD
}
这是单身人士的结合点
package edu.citytech.taxes.test;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import edu.citytech.taxes.service.MarginalTax;
import gov.irs.marignal.taxrate.ICalculate;
import gov.irs.marignal.taxrate.Status;
class TestSingle {
@Test
@DisplayName("test for single people 900k") // generates name for test name is junit report
void test() {
ICalculate tax = new MarginalTax();
float taxPaid = tax.getTaxRate(Status.SINGLE, 2019, 9_000);
boolean status = taxPaid == 900;
assertTrue(status, "900 was expected wrong values" + taxPaid);// assert produce junit report
}
@Test
@DisplayName("test for single people 1000k") // generates name for test name is junit report
void test2() {
ICalculate tax = new MarginalTax();
float taxPaid = tax.getTaxRate(Status.SINGLE, 2019, 10_000);
boolean status = taxPaid == 1006;
assertTrue(status, "1006 was expected wrong values" + taxPaid);// assert produce junit report
}
@Test
@DisplayName("test for single people 10") // generates name for test name is junit report
void test3() {
ICalculate tax = new MarginalTax();
float taxPaid = tax.getTaxRate(Status.SINGLE, 2019, 10);
boolean status = taxPaid == 1;
assertTrue(status, "1 was expected wrong values" + taxPaid);// assert produce junit report
}
@Test
@DisplayName("test for single people 150,000") // generates name for test name is junit report
void test4() {
ICalculate tax = new MarginalTax();
float taxPaid = tax.getTaxRate(Status.SINGLE, 2019, 150_000);
boolean status = taxPaid == 30_174.50;
assertTrue(status, "30_174.50 was expected wrong values" + taxPaid);// assert produce junit report
}
@Test
@DisplayName("Test for single people 200,000")
void test5() {
ICalculate tax = new MarginalTax();
float taxPaid = tax.getTaxRate(Status.SINGLE, 2019, 200_000);
boolean status = taxPaid == 45_316.50;
assertTrue(status, "45_316.50 was expected wrong value" + taxPaid);
}
@Test
@DisplayName("Test for single people 300,000")
void test6() {
ICalculate tax = new MarginalTax();
float taxPaid = tax.getTaxRate(Status.SINGLE, 2019, 300_000);
boolean status = taxPaid == 80_193.50;
assertTrue(status, "80_193.50 was expected wrong value" + taxPaid);
}
@Test
@DisplayName("Test for single people 600,000")
void test7() {
ICalculate tax = new MarginalTax();
float taxPaid = tax.getTaxRate(Status.SINGLE, 2019, 600_000);
boolean status = taxPaid == 186_987.50;
assertTrue(status, "186_987.50 was expected wrong value" + taxPaid);
}
}
解决方案
推荐阅读
- azure - Microsoft Graph 登录 - 个人帐户触发“租户中不存在用户帐户”
- excel - 可变循环范围
- html - 更改或添加样式到标签上的变量?
- android - 为什么需要更改协程中的调度程序?
- python - 如何以设定的频率从给定日期对 DataFrame 进行下采样
- sql - SQL Server 中 2 个不同日期列的每周计数
- ios - Flutter 应用本地化在 iOS 上不起作用
- java - 如何使用 JSoup 抓取这个特定元素?
- javascript - Javascript | 如何使用类名打印第二个元素
- android - 当我关闭手机的互联网时,Kotlin 的 URL.readText() 崩溃