[英]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.