首页 > 解决方案 > 如何将我的税率数组应用于我的 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);
   }


 }

标签: java

解决方案


推荐阅读