2016-05-24 15 views
-2

Ich habe die folgende Methode, die Ich mag würde testen, ist es einfach ein int erhöht, wenn eine Boolean Bedingung erfüllt ist:Wie kann man einen Int testen, der mit Junit inkrementiert wurde?

public void incrementIfConditionMet(Boolean personCheckedIn) { 

    int peopleInHotel=0; 

    if (personCheckedIn==true){ 

     peopleInHotel++ 

    } 

} 

Ich bin sehr neu für Unit-Tests in Java. Wie kann ich unit test dies überprüfen, ob der Int inkrementiert wurde oder nicht?

+1

Sofern es sich um eine Eigenschaft oder ein Rückgabewert ist, wie würden Sie darauf zuzugreifen? Sie müssen es irgendwo platzieren, wo es zugegriffen werden könnte, wie ein öffentlicher Getter machen oder es als Rückgabewert setzen – Draken

+0

Ich bin mir nicht sicher, was Sie meinen, geben Sie bitte ein Codebeispiel? – java123999

+1

Sie sollten die öffentliche API der Klasse testen. Wenn Sie eine getPeopleInHotel-Funktion haben, sollten Sie in der Lage sein, asEquals (getPeopleInHotel(), expected); – JohannisK

Antwort

6

Ihr Wert peopleInHotel kann derzeit nicht außerhalb der Methode aufgerufen werden, da sie intern erstellt wurde. Wenn Sie darauf zugreifen wollen, sollten Sie folgendes tun:

private int peopleInHotel=0; 

public int getPeopleInHotel() { 
    return peopleInHotel; 
} 

public void incrementIfConditionMet(Boolean personCheckedIn) { 
    if (personCheckedIn){ 
     peopleInHotel++ 
    } 
} 

Jetzt in Ihrem Test-Klasse, können Sie durch den Aufruf überprüfen getPeopleInHotel();

So ist der Testfall wäre:

int initalValue = classInstance.getPeopleInHotel(); 
classInstance.incrementIfConditionMet(true); 
assertEquals(classInstance.getPeopleInHotel(), initalValue +1); 

Dies würde auch Ihr Problem beheben, bei dem Sie den Wert nicht beibehalten, nachdem die Methode ausgeführt wurde. Im Moment wird Ihre Variable peopleInHotel in Ihrem aktuellen Code-Setup verworfen, nachdem Sie mit der Methode fertig sind.

+0

OK danke, aber wie schreibe ich den Test, um auf Int zu prüfen? – java123999

+2

Es ist in dem Beispiel ... assertEquals (getPeopleInHotel(), expectedQuantity); Sie sollten sich einige Tutorials ansehen, wenn Sie nicht wissen, wie Sie das umsetzen können. In diesem Beispiel würden Sie eine Instanz erstellen, incrementIfConditionMet aufrufen (false), assert mit expectedQuantity 0, dann incrementIfConditionMet (true) aufrufen, dann mit expectedQuentity 1 bestätigen – JohannisK

+0

Ich habe den Testfall aktualisiert, Sie müssen den vorherigen Wert abrufen, und dann überprüfe es gegen den neuen Wert, nachdem du deine Methode ausgeführt hast – Draken

0
int peopleInHotel=0; 

public void incrementIfConditionMet(Boolean personCheckedIn) { 
    if (personCheckedIn==true){ 

     peopleInHotel++ 

    } 
} 

public int getPeopleInHotel() { //test the returned value after you've incremented 
    return peopleInHotel; 
} 
0

wie diese versuchen:

public class Hotel { 
    private int peopleInHotel = 0; 

    //a constructor... 

    public int getPeopleInHotel() { 

     return this.peopleInHotel; 

    } 

public void incrementIfConditionMet(Boolean personCheckedIn) { 
     if (personCheckedIn==true){ 
      peopleInHotel++ 
     } 
} 
} 

In Ihrem Unit-Test, können Sie jetzt so etwas tun:

//defining your TestCase 
Hotel hotel = new Hotel(); 
int initValue = hotel.getPepleInHotel(); 
hotel.incrementIfconditionmet(true); 
assertEquals(hotel.getPeopleInHotel(),initValue+1);