繁体   English   中英

使用无效方法进行Junit测试

[英]Junit Testing with void method

我必须为以下类创建一个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));
}

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

 public int getBalance(){
      return balance;
    }

并使用它来做断言:

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

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

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

在您的情况下, 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());
}

不要测试实现; 测试界面。

您可以在该方法中包含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());

暂无
暂无

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

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