2017-05-03 191 views
1

我必須爲以下類創建JUnit測試,但我無法對方法deposit進行測試。Junit使用void方法測試

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)); 
} 
+1

創建一種獲取餘額的方法。在電話會議之前和之後斷言存款。 – Compass

+0

而你的問題是... –

+0

我寫的測試檢查代碼不會運行,,我在「assertEquals」得到一個錯誤,因爲方法存款返回void,所以我如何使它工作? –

回答

2

你可以在Account類添加getBalance()方法:

public int getBalance(){ 
     return balance; 
    } 

,並用它做斷言:

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

一般添加單元測試過程中只使用方法可能會被評估和討論。
但這裏getBalance()顯示爲不可避免的。

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()); 
} 

不要測試執行;測試界面。

0

你可以在該方法具有的System.out.println,並告訴JUnit測試要求爲標準輸出:

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());