2017-04-07 12 views
2

ich einen JUnit-Test habe, die eine Feder-Boot-Anwendung gestartet wird (in meinem Fall ist die Hauptklasse SpringTestDemoApp) nach dem Test:-Test, der eine Feder Boot-Anwendung Inbetriebnahme

@WebIntegrationTest 
@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = SpringTestDemoApp.class) 
public class SpringTest { 

    @Test 
    public void test() { 
     // Test http://localhost:8080/ (with Selenium) 
    } 
} 

Alles funktioniert gut mit Feder -boot 1.3.3.RELEASE. Trotzdem wurden die Annotationen @WebIntegrationTest und @SpringApplicationConfiguration im Spring-Boot 1.5.2.RELEASE entfernt. Ich habe versucht, den Code auf die neue Version umzuformen, aber ich kann das nicht tun. Mit dem folgenden Test wird meine app vor dem Test nicht gestartet und http://localhost:8080 liefert 404:

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = SpringTestDemoApp.class) 
@WebAppConfiguration 
public class SpringTest { 

    @Test 
    public void test() { 
     // The same test than before 
    } 

} 

Wie kann ich meinen Test Refactoring, um es im Frühjahr-Boot 1.5 zu machen funktioniert?

+0

Können Sie eine Ausnahme/Nachricht in Protokollen sehen? –

Antwort

4

Die webEnvironment Option innerhalb @SpringBootTest sehr wichtig ist. Es kann Werte wie NONE, MOCK, RANDOM_PORT, DEFINED_PORT annehmen.

  • NONE nur Frühling Bohnen schaffen und nicht Mock die Servlet-Umgebung.

  • MOCK wird Frühjahr Bohnen und eine Schein-Servlet-Umgebung erstellen.

  • RANDOM_PORT startet den eigentlichen Servlet-Container auf einem zufälligen Port; Dies kann unter Verwendung der @LocalServerPort autowired werden.

  • DEFINED_PORT wird den definierten Port in den Eigenschaften übernehmen und den Server damit starten.

Die Standardeinstellung ist RANDOM_PORT wenn Sie keine webEnvironment definieren. So kann die App für Sie an einem anderen Port beginnen.

Versuchen Sie, es auf DEFINED_PORT zu überschreiben, oder versuchen Sie, die Portnummer automatisch zu starten, und versuchen Sie, einen Test an diesem Port auszuführen.

2

Dies ist ein Ausschnitt dessen, was ich gerade benutze, natürlich können Sie, abhängig von dem Webtreiber, den Sie verwenden möchten, verschiedene Beans dafür erstellen. Achten Sie darauf, Federschuh-Test und Selen auf Ihrem pom.xml haben:

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-java</artifactId> 
     <version>${selenium.version}</version> 
     <scope>test</scope> 
    </dependency> 

in meinem Fall ${selenium.version} ist:

<properties> 
    <selenium.version>2.53.1</selenium.version> 
</properties> 

und das sind die Klassen:

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
@Import(IntegrationConfiguration.class) 
public abstract class AbstractSystemIntegrationTest { 

    @LocalServerPort 
    protected int serverPort; 

    @Autowired 
    protected WebDriver driver; 

    public String getCompleteLocalUrl(String path) { 
     return "http://localhost:" + serverPort + path; 
    } 
} 

public class IntegrationConfiguration { 

    @Bean 
    private WebDriver htmlUnitWebDriver(Environment env) { 
     return new HtmlUnitDriver(true); 
    } 
} 


public class MyWhateverIT extends AbstractSystemIntegrationTest { 

    @Test 
    public void myTest() { 
     driver.get(getCompleteLocalUrl("/whatever-path/you/can/have")); 
     WebElement title = driver.findElement(By.id("title-id")); 
     Assert.assertThat(title, is(notNullValue())); 
    } 
} 

hoffe, es hilft !

2

Es funktioniert nicht, weil SpringBootTest standardmäßig zufällig Port verwendet, bitte:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) 
Verwandte Themen