使用void方法进行Junit测试

时间:2017-05-03 20:30:59

标签: java junit void

我必须为以下类创建一个JUnit测试,但我无法对方法deposit进行测试。

public class Account {
    private int balance;
    private float Interest_Rate =10;

    public Account() {
        this.balance = 0;
    }
    public void deposit(int amount) {       
        balance = balance+amount;
    }
}

@Test
public void testdeposit() {
    Account i = new Account();
    assertEquals("Result",75,i.deposit(25));
}

3 个答案:

答案 0 :(得分:2)

您可以在getBalance()类中添加Account方法:

 public int getBalance(){
      return balance;
    }

并使用它来做断言:

@Test
public void deposit(){
    Account i = new Account();
    i.deposit(25)
    assertEquals("Result",25, i.getBalance());
}

通常可以评估和讨论添加仅在单元测试期间使用的方法 但这里getBalance()似乎是不可避免的。

答案 1 :(得分:0)

测试私有字段/方法没有意义。

在您的情况下,balance是'只写'变量;它应该有公共访问器(如上所述),或者字段应该用在其他方法中,如

public int income() {
  if(balance == 0 ) return 0;
  if(balance < 100) return 10;
  if(balance < 1000) return 15;
  return 20;
}

在这种情况下,您的测试应该像

@Test
public void deposit(){
  Account acc = new Account();
  acc.deposit(150);
  assertEquals("Result ", 15, acc.income());
}

不测试实施;测试界面。

答案 2 :(得分:0)

你可以在方法中有一个System.out.println并告诉JUnit测试要求stdout:

private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();

然后

@Before
public void setUpStreams() {
    System.setOut(new PrintStream(outContent));
}

@After
public void cleanUpStreams() {
    System.setOut(null);
}

最后

assertEquals(<here goes your expected string>, outContent.toString());