Testy w springu

0

Witam, mam pytanie jak poprawnie wykonywać testy w springu.
Załóżmy że mam controller, który wywołuje plik index.jsp czyli główną stronę aplikacji:

@WebServlet
public class HomeController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HomeController() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.getRequestDispatcher("WEB-INF/index.jsp").forward(request, response);
	}
	
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

Wykonując test skonfigurowany w następujący sposób:

@RunWith(SpringRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = "classpath:/applicationContext.xml")
public class ApplicationTest {

    
    private MockMvc mockMvc;
    @Autowired
    private WebApplicationContext wac;
    
    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
    }

    @Test
    public void shouldReturnDefaultMessage() throws Exception {
        this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
                .andExpect(content().string(containsString("Hello World")));
    }
}

ciągle otrzymuje następujący błąd:

java.lang.AssertionError: Status expected:<200> but was:<404>

Ciągle nie znajduje mi przy uruchomieniu testów odpowiedniego contentu. Dzieje się tam po odpaleniu testów poprzez mavena(maven test). Sama aplikacja gdy odpalam ją na serwerze działa poprawnie. Ktoś wie dlaczego wyskakuje mi taki błąd? Ewentualnie ktoś ma jakieś wskazówki, tutoriale czy cokolwiek innego dotyczące testów aplikacji webowych w springu? W jaki sposób można przetestować właśnie taki controller który przedstawiłem przykładzie w prawidłowy sposób?

Pozdrawiam ;)

1

Ja się ostatnio uczyłem z tego (Baeldung):
http://www.baeldung.com/integration-testing-in-spring

Ps. Nie możesz po prostu oznaczyć klasę adnotacją @Controller, itp, itd?

0

Czemu nie korzystasz z normalnego kontrolera tylko jakiegoś servletu? oO A co do testów polecam jeszcze Liquibasa i jakąś bazę danych w pamięci (można sobie odpowiedni profil ustawić na beana z DataSource : ) )

0

Spring MockMvc testuje springowe kontrolery, a Ty chyba masz kontroler JEE. To tak nie pójdzie. No i JSP też się nie testuje przez MockMvc, tylko sam model i status code.

Spring Boota możesz użyć i jego Embedded Container. Wtedy JSP załapie, o ile odpowiednio skonfigurujesz. Tylko czy on zobaczy Twój @WebServlet... Pewnie jakoś się go da do tego zmusić... Czekaj, ja chyba nawet to zrobiłem :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1