2017-05-03 1 views
1

Je dois créer un test JUnit pour la classe suivante, mais je ne peux pas faire le test pour la méthode deposit.Junit Test avec la méthode 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

Créer une méthode get pour accéder à la balance. Affirmer le dépôt avant et après l'appel. – Compass

+0

Et votre question est ... –

+0

Le test que j'ai écrit vérifier le code ne fonctionnerait pas, je reçois une erreur à la "assertEquals", comme le dépôt de méthode renvoie void ,, alors comment puis-je le faire fonctionner? –

Répondre

2

Vous pouvez ajouter une méthode getBalance() dans la classe Account:

public int getBalance(){ 
     return balance; 
    } 

et l'utiliser pour faire l'affirmation:

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

En général, l'ajout de méthodes qui ne sont utilisées lors de tests unitaires peut être évalué et discuté. Mais ici, getBalance() apparaît comme incontournable.

0

champs d'essai/méthodes privées n'a pas de sens.

Dans votre cas, balance est variable 'écriture seule'; il devrait avoir accesseur public (comme écrit ci-dessus), ou sur le terrain doit être utilisé dans d'autres méthodes comme

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

Dans ce cas, votre test devrait être comme

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

Ne pas tester la mise en œuvre; interface de test.

0

Vous pourriez avoir un System.out.println dans la méthode et dire au test JUnit pour demander stdout:

private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); 

puis

@Before 
public void setUpStreams() { 
    System.setOut(new PrintStream(outContent)); 
} 

@After 
public void cleanUpStreams() { 
    System.setOut(null); 
} 

enfin

assertEquals(<here goes your expected string>, outContent.toString());