2017-01-19 4 views
1

Ich fand unten Code von here. Alle Stubs werden in @Before Abschnitt erstellt.Korrekte Platzierung der Stubs in Junit Test Klasse für Wiremock

@Rule 
public WireMockRule wireMockRule = new WireMockRule(18089); 

private HttpFetcher instance; 

@Before 
public void init() { 
    instance = new HttpFetcher(); 

    // all the stubs 
    stubFor(get(urlEqualTo("/hoge.txt")).willReturn(
      aResponse().withStatus(200).withHeader("Content-Type", "text/plain").withBody("hoge"))); 
    stubFor(get(urlEqualTo("/500.txt")).willReturn(
      aResponse().withStatus(500).withHeader("Content-Type", "text/plain").withBody("hoge"))); 
    stubFor(get(urlEqualTo("/503.txt")).willReturn(
      aResponse().withStatus(503).withHeader("Content-Type", "text/plain").withBody("hoge"))); 
} 

@Test 
public void ok() throws Exception { 
    String actual = instance.fetchAsString("http://localhost:18089/hoge.txt"); 
    String expected = "hoge"; 
    assertThat(actual, is(expected)); 
} 

@Test(expected = HttpResponseException.class) 
public void notFound() throws Exception { 
    instance.fetchAsString("http://localhost:18089/NOT_FOUND"); 
} 

@Test(expected = HttpResponseException.class) 
public void internalServerError() throws Exception { 
    instance.fetchAsString("http://localhost:18089/500.txt"); 
} 

@Test(expected = HttpResponseException.class) 
public void serviceUnavailable() throws Exception { 
    instance.fetchAsString("http://localhost:18089/503.txt"); 
} 
} 

Ist das der richtige Ansatz? Wäre es nicht besser, wenn wir den Stub in @Test Methode selbst erstellen (so können die mit diesem Test verbundenen Stubs leicht identifiziert werden).

Antwort

2

Der "richtige" Ansatz ist immer umstritten.

Der Code in der @Before-Methode wird jedes Mal vor jeder @Test-Methode ausgeführt.

In diesem Sinne können Sie wählen, ob Sie sie dort lassen oder zu jeder Testmethode verschieben möchten.

Ich, zum einen, Wert Lesbarkeit sehr hoch, und ich stimme zu, da diese Stubs überhaupt nicht zwischen den Tests geteilt werden, jeden Stub in den Test setzen, der sie verwendet würde lesbarer (und damit besser).

1

Beim Schreiben von Komponententests müssen Sie immer zwischen "generischen" Best Practices (wie: "Vermeidung von Codeverdoppelung auf alle Fälle") und den "unit test specific" Best Practices (wie: idealerweise alle Kenntnisse) abwägen benötigt, um eine Testmethode zu verstehen, ist ideal gelegen innerhalb diese Testmethode).

In diesem Sinne könnte ein sinnvoller Ansatz sein:

  • durch mehrere Testfälle gemeinsame Einstellungen in eine @Before Setup() -Methode
  • Einstellungen nur von einem Testfall verwendet gehen könnten ... gehen nur in diesen Testfall