2017-05-03 17 views
1

次のクラスのJUnitテストを作成する必要がありますが、メソッドdepositのテストはできません。voidメソッドによるJunitテスト

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

を作成します。残高にアクセスするgetメソッド。コールの前と後にデポジットをアサートします。 – 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は「書き込み専用」変数です。それは(上に書いたように)公共アクセサを持つ必要があり、またはフィールドは、あなたのテストが実装をテストしないでください

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

ようにする必要があります。この場合

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

のような他の方法で使用する必要があります。テストインタフェース。

0

あなたが方法でのSystem.out.printlnを持っているとstdoutを求めるために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()); 
関連する問題