2016-11-06 2 views
0

Ich schreibe ein Programm, in dem, wenn es keine Rezensionen für ein Spiel gibt, ich es dann zur Karte hinzufügen muss. Wenn es eine Rezension für ein Spiel gibt, füge die angegebene Rezension der entsprechenden GameInfo hinzu. Mein Code wird gut kompiliert, aber mein Komponententest gibt nicht die Punkte zurück, die ich zurückgeben muss, um zu zeigen, dass mein Code korrekt ausgeführt wird. Hier ist mein Code:Java: Unit Test liefert nicht das korrekte Ergebnis

class GameInfoCollection { 
    // TODO - you need to use a Map (from a String, the title, to a GameInfo) to keep track of all the GameInfo's 
    Map<String, Integer> titles = new HashMap<String, Integer>(); 
    // TODO - if there are no reviews for the game, create a new GameInfo (with this review) and add it to the map 
    // if there's one, add the given review to the corresponding GameInfo 
    public void addGameReview(String gameTitle, Review r) 
    { 
     if (titles.isEmpty()) { 
      GameInfo g = new GameInfo("Review"); 
     } else titles.put(gameTitle, 1); 

    } 

    public int getNumberOfReviewsForGame(String gameTitle) 
    { 
     // TODO - implement this 
     return titles.get(titles); 
    } 

Hier ist mein Unit Test für diese Methoden. Es sollte 20 Punkte zurück, aber es kehrt keine Punkte:

public void testGetNumberOfReviewsForGame() 
    {  
     GameInfoCollection gic=new GameInfoCollection(); 


     gic.addGameReview("g1",new Review("cool",5)); 
     gic.addGameReview("g1",new Review("cool",3)); 
     gic.addGameReview("g2",new Review("cool",2)); 
     gic.addGameReview("g3",new Review("cool",2)); 

     Assert.assertEquals(2,gic.getNumberOfReviewsForGame("g1")); 
     Assert.assertEquals(1,gic.getNumberOfReviewsForGame("g2")); 
     gic.addGameReview("g1",new Review("cool",3)); 
     Assert.assertEquals(3,gic.getNumberOfReviewsForGame("g1")); 
    } 

    @Grade(points=20) 
    @Test 

Hier ist mein Code für meine ganze program.Please beachten, dass es Abschnitte am Ende, die ich noch nicht gelernt habe.

Bitte beachten Sie, dass ich noch neu in Java bin und jede Hilfe wird geschätzt. Vielen Dank!

+1

Am Anfang ist HashMap Schlüssel-> Wert Sammlung (einzelne Schlüsselpunkte auf Einzelwert), es scheint, Sie wollen einen Schlüssel für mehrere Werte oder etwas ähnliches, vielleicht ein Multimap (siehe Guava) oder Map >. – AlexC

+0

Bitte geben Sie nur den relevanten (aber vollständigen) Code in Ihre Frage ein. – nbrooks

+0

@nbrooks Ich habe die Frage bearbeitet, um nur relevanten Code – rls1982

Antwort

1

Das sieht wie eine Hausaufgabe aus, und ich nehme an, der Komponententest ist Teil des Codes, den Ihr Lehrer zur Verfügung gestellt hat. Die Tatsache, dass der Komponententest fehlschlägt, bedeutet nicht, dass der Komponententest falsch ist, sondern dass sich der Code nicht korrekt verhält. Insbesondere sind die Teile in GameInfoCollection, die Sie nicht beendet haben.

Also, gehen wir über das, was jedes dieser TODO Kommentare Mittel:

// TODO - you need to use a Map (from a String, the title, to a GameInfo) to keep track of all the GameInfo's 

Eine Karte hat Schlüssel und Werte, und die von den Tasten zu den Werten abzubilden. In der Deklaration Map<String, Integer> ist der erste Typ (String) der Typ der Schlüssel und der zweite der Typ der Werte. Das TODO sagt hier, dass der Typ der Werte GameInfo sein muss.

// TODO - if there are no reviews for the game, create a new GameInfo (with this review) and add it to the map 

Jeder Teil dieser muss innerhalb der if Zweig durchgeführt werden. Sie müssen a) ein neues GameInfo erstellen, b) die Bewertung einfügen und c) es der Karte hinzufügen. Sie tun derzeit nur Teil a), und selbst dafür übergeben Sie nicht den richtigen Wert an den Konstruktor - schauen Sie sich den GameInfo Konstruktor und den Namen des Arguments an; stimmt "Review" überein?

// if there's one, add the given review to the corresponding GameInfo 

Dies ist über das, was in der else Zweig gehen sollte.

// TODO - implement this 

Technisch hat dieses Verfahren bereits eine Implementierung, aber du wirst es ändern müssen, um richtig von der ersten ERLEDIGEN über den Kartenwerttyp die Änderung entsprechen.