This is my first try with JUnit testing and Spring MVC.
I have made a test configuration class for beans and one test class for controller. While executing the test, there is test failure which says Initialization error and no class definition found error.
Following is my TestBeanConfig.java file
package com.mkyong.controller;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.ContextConfiguration;
@Configuration
@ComponentScan(basePackages = "com.mkyong.controller")
public class TestBeanConfig {
@Bean
MultiplicationService multiplicationservice() {
return new MultiplicationService();
}
@Bean
NumberDAO numberDao() {
NumberDAO numberdao =new NumberDAO();
return numberdao;
}
}
and MultiplicationServiceTest.java
package com.mkyong.controller;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes={TestBeanConfig.class})
public class MultiplicationServiceTest {
@Autowired
private MultiplicationService multiplytestobject;
MockMvc mockMvc ;
@Autowired
private WebApplicationContext wac;
public MultiplicationServiceTest() {
}
public MultiplicationService getMultiplytestobject() {
return multiplytestobject;
}
public void setMultiplytestobject(MultiplicationService multiplytestobject) {
this.multiplytestobject = multiplytestobject;
}
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@Test
public void testHandleMultiply() throws Exception {
mockMvc.perform(post("/multiply").param("number1","7").param("number2","7"))
.andExpect((model().attribute("result", "49")))
.andExpect(redirectedUrl("/multiply.jsp"));
}
}
Trace of error:
Tests in error:
initializationError(com.mkyong.controller.MultiplicationServiceTest): Failed to instantiate [org.springframework.test.context.web.WebDelegatingSmartContextLoader]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.626s
[INFO] Finished at: Sun Jan 28 15:40:26 IST 2018
[INFO] Final Memory: 16M/180M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.9:test (default-test) on project bmfinal: There are test failures.
[ERROR]
Thank you.