2016-11-21 1 views
1

Ich arbeite an einem Testfall und ich habe Probleme. Es fällt mir schwer, meine Testfälle zur Arbeit zu bringen. Hier ist der Code:Testfall funktioniert nicht richtig. Ausgabe-Einstellung zwei Zahlen gleich zueinander

public class Appointment extends Actor 
    { 
     int hour; 
     String description; 

     public Appointment(int hour, String description) 
     { 
      super(); 
      this.hour = hour; 
      this.description = description; 
     } 


     public void setHour(int newHour) 
     { 
      newHour = hour; 
     } 
    } 

/////////

public class AppointmentTest extends TestCase 
{ 

    private Appointment appointment; 
    private int hour; 
    private String description; 
    private String newDescription; 
    private int newHour; 

    public AppointmentTest() 
    { 

    } 


    public void setUp() 
    { 
     appointment = new Appointment(hour, description); 
     this.hour = hour; 
     this.description = description; 
     hour = 7; 
     description = ""; 
     newHour = 1; 
     newDescription = "hello"; 
    } 

    public void testSetHour() 
    { 
     appointment.setHour(1); 
     assertEquals(newHour, hour); 
    } 
} 

Das Problem ist, wenn ich meine Testfall laufen sie sagt, dass newhour 7 ad Stunde ist noch 1. Hat jemand Warum?

+0

Es gibt keinen Code, der entweder 'hour' oder' newHour' ändert ... Sind Sie sicher, dass Sie den gesamten Code geschrieben haben? (Siehe [MCVE] als Anleitung) –

+0

Ich meine, ich kann meinen gesamten Code posten. Aber das ist der Code, der für das Problem relevant ist. Würde es helfen, wenn ich einfach alles posten würde. –

+0

Wenn das der Fall ist, möchten Sie vielleicht etwas über Java lesen ... Sieht so aus, als ob Sie annehmen, dass Werte als Referenz übergeben werden - siehe http://stackoverflow.com/questions/3326112/java-best-way-to-pass -int-by-reference –

Antwort

0

Mehrere Fehler in Ihrem Code geschrieben -

1.

public void setHour(int newHour) 
{ 
    newHour = hour; 
} 

Es gibt keine Instanz-Variable newHour in Klasse Termin genannt. Auch wenn es von der Klasse Actor geerbt wird, verwenden Sie nicht this.newHour, um es so zu setzen, dass Ihre Logik hier fraglich erscheint.

2.

public void setUp() 
{ 
    appointment = new Appointment(hour, description); 
    this.hour = hour; 
    this.description = description; 
    hour = 7; //this statement is overriding your this.hour = hour statement. what is the point? 
    description = ""; //this statement is overriding your this.description = description statement. what is the point? 
    newHour = 1; 
    newDescription = "hello"; 
} 

3.

public void testSetHour() 
{ 
    appointment.setHour(1); // this statement doesn't make any difference for next assertEquals statement. It changes instance variable hour, not the local variable. 
    assertEquals(newHour, hour); 
} 

Zum Zeitpunkt der assertEquals Aufruf newHour 1 und hour ist 7. So

Das Problem ist, wenn ich Führen Sie mein Testfall es heißt, dass Newhour 7 Ad-Stunde ist ist noch 1

stimmt nicht.

+1

Ich machte diese Änderungen und es funktioniert jetzt. Danke, Mann! –

+0

froh, dass es funktioniert. Du kannst die Antwort immer annehmen und deine Meinung verbessern: P –

Verwandte Themen