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