2016-08-29 4 views
1

Ich wollte verstehen, wie man einen JUnit-Testfall schreibt, wenn ein neues Objekt an den Controller übergeben wird.Wie zu Junit für neues Objekt?

Es folgt das Codeelement vom Spring MVC-Controller, das das neue PriceIncrease-Objekt übergibt.

Komponententest habe ich, was sicherlich falsch ist, da es fehlschlagen wird.

@Test 
public void testShowPriceIncreasePage(){ 
    String viewName = inventoryController.showPriceIncreasePage(model); 

    /* Expecting to return the new object of PriceIncrease*/ 
    assertEquals(new PriceIncrease(), model.get("priceIncrease")); 

    //assertEquals(InventoryController.priceIncreasePage, viewName); 
} 

Wir sollten wann verwenden, um sicherzustellen, dass das gleiche Objekt im Junit-Test zurückgegeben wird. Ich bin mir nicht sicher, ob das der richtige Weg ist.

@Test 
public void testShowPriceIncreasePage(){ 
    String viewName = inventoryController.showPriceIncreasePage(model); 

    /* Expecting to return the new object of PriceIncrease*/ 
    PriceIncrease priceIncrease = new PriceIncrease(); 
    when(model.get("priceIncrease")).thenReturn(priceIncrease); 
    assertEqual(priceIncrease, model.get("priceIncrease")); 
} 

Vielen Dank im Voraus

Antwort

0

gute Tests zu schreiben, ist ein extrem breites Thema, eine, die Sie wirklich in, wenn Sie jemals schreiben wollen wirklich gute und nützliche Tests tauchen sollten.

Aus Gründen der Ihr Beispiel:

  • Name des Tests mit ‚Test‘ sollte nicht beginnen, es sei denn, Sie JUnit 3.x verwenden JUnit 4.x bietet @Test Annotation Testmethoden,
  • Name des Tests markieren sollte dem Leser sagen, was ist, dass Sie von dem Gerät unter Test erwarten,
  • Test given/when/then Struktur folgen sollte. given: In diesem Block Setup-Status des Systems, when: ist der Ort, wo Sie Ihren Code aufrufen, der getestet werden soll, then: ist der Ort, an dem Sie Ergebnisse bewerten (alle Behauptungen sollten hier gehen)
  • Sie wollen um zu bestätigen, dass sowohl der von der Controller-Methode zurückgegebene Wert gleich dem "gewünschten" ist und dass Ihr Modell ein bestimmtes Objekt enthält,
  • Ich sehe keinen Code für PriceIncrease, aber ich nehme an, dass es keinen equals/hashCode hat Methoden implementiert? Wenn dies der Fall ist, wird der Code nicht funktionieren.
  • Hinzufügen equals/hashCode-PriceIncrease werden Sie mit dem Test helfen Sie schreiben

Ihr Test wird wie folgt aussehen mehr weniger sollte:

@Test 
public void shouldRedirectToPriceIncreasePageWithModelValuesSetCorrectly(){ 
    // given 
    Map<String, Object> model = new HashMap<>(); 

    // when 
    String viewName = inventoryController.showPriceIncreasePage(model); 

    // then 
    assertEqual(viewName, "some-view-name"); 
    assertEqual(model.get("priceIncrease"), new PriceIncrease()); 
    assertEqual(model.size(), 1); 
} 

Wenn Sie Ihre Testschreibfähigkeiten verbessern möchten, dann Sehen Sie diese Bücher von Tomasz Kaczanowski:

Verwandte Themen