繁体   English   中英

单一类中的JUnit多重测试

[英]JUnit multiple test in single class

public class AccountModel extends AbstractModel {
    public static BigDecimal balance = new BigDecimal(0.00);
    public static BigDecimal balanceEuro = new BigDecimal(0.00);
    public static BigDecimal balanceYen = new BigDecimal(0.00);

    // deposit method
    public static BigDecimal deposit(double amount) {
        balance = balance.add(new BigDecimal(amount));
        return balance;
    }

    // withdraw method
    public static void withdraw(BigDecimal withdraw) {
        balance = balance.subtract(withdraw);

    }

    public static BigDecimal euro() {
        balanceEuro = balance.multiply(new BigDecimal(0.79));
        return balanceEuro;
    }

    public static BigDecimal yen() {
        balanceYen = balance.multiply(new BigDecimal(94.1));
        return balanceYen;
    }

    public static BigDecimal balance() {
        return balance;

    }


    @Override
    public void notifyChange(ModelEvent me) {
        // TODO Auto-generated method stub

    }
}

public class AccountModelTest {
    AccountModel accTest = new AccountModel();

    // test deposit method
    @Test
    public void testDeposit() {
        // BigDecimal balance = new BigDecimal(0.00);

        System.out.println("Deposit");
        accTest.deposit(30.00);
        accTest.deposit(100.00);
        // excepted balance
        BigDecimal expectedBalance = new BigDecimal(130.00);
        System.out.println("Expected: " + expectedBalance.setScale(2, BigDecimal.ROUND_HALF_DOWN) + " Actual: "
            + accTest.balance().setScale(2, BigDecimal.ROUND_HALF_DOWN));

        BigDecimal balance = new BigDecimal(0.00);
        assertEquals(expectedBalance.setScale(2, BigDecimal.ROUND_HALF_DOWN),
            accTest.balance().setScale(2, BigDecimal.ROUND_HALF_DOWN));
        System.out.println("");
    }

    // test withdraw method
    @Test
    public void testWithdraw() {
        System.out.println("Withdraw");
        AccountModel accTest1 = new AccountModel();
        accTest1.deposit(40.00);
        accTest1.withdraw(new BigDecimal(30.00));

        BigDecimal expectedBalance1 = new BigDecimal(10.00);

        System.out.println("Expected: " + expectedBalance1.setScale(2, BigDecimal.ROUND_HALF_DOWN) + " Actual: "
            + accTest1.balance().setScale(2, BigDecimal.ROUND_HALF_DOWN));

        assertEquals(expectedBalance1.setScale(2, BigDecimal.ROUND_HALF_DOWN),
            accTest1.balance().setScale(2, BigDecimal.ROUND_HALF_DOWN));

    }
}

因此,我正在为提取方法和存款方法做2个单独的测试用例。 当我实现1个测试用例时,deposit方法工作正常,而withdraw方法工作正常。 但是当我像上面显示的那样运行测试时,测试总是失败。 输出是

提现期望:10.00实际:10.00

期望的押金:130.00实际:140.00(应该是130.00)

由于您在AccountModel类内使用静态字段,因此其值在所有AccountModel实例之间共享。 使它们成为非静态私有:

private BigDecimal balance = BigDecimal.ZERO;
private BigDecimal balanceEuro = BigDecimal.ZERO;
private BigDecimal balanceYen = BigDecimal.ZERO;

JUnit是创造了新的实例AccountModelTest为每类@TestAccountModel所以起动平衡将是每一个测试为零。

每个测试显示都在干净的上下文中运行,您将与多个测试共享AccountModel accTest 您应该在每次测试运行时设置并清理上下文。

public class AccountModelTest {
AccountModel accTest;

@Before // this code will run before any test start, it will create new model for each test
void setUp() {


    AccountModel accTest = new AccountModel();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM