title: Spring Controller Integration Testing using TestNg
body: <p>I am new to Spring unit Testing. Writing test cases for the Spring rest Controller. When I am writing the test cases in this way </p>
  
  <pre><code>@WebAppConfiguration
  @ContextConfiguration(locations = {"file:src/test/resources/applicationContext.xml"})
  public class TaskControllerIntegrationTest extends AbstractTransactionalTestNGSpringContextTests {
  
      private MockMvc mockMvc;
  
      @Autowired
      private WebApplicationContext wac;
  
      @BeforeClass
      public void setUp() {
  
          this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
      }
  
      @Test
      public void testGetAllTasks() throws Exception {
  
          mockMvc.perform(get("/v1/testSessions/{testSessionId}/tasks", 1l))
                  .andExpect(status().isOk());
  
  
  
      }
  
  }
  </code></pre>
  
  <p>I am getting the testcase failed don't know why :(  while If i initialize the MockMvc using the standalone controller it works perfect and my allTest cases are passes.The setup for the MockMvc using standalone controller is in this way. It's for unit testing:</p>
  
  <pre><code>@Mock
      private TaskService taskServiceMock;
  
      @InjectMocks
      private TaskController taskController;
  
  
      private MockMvc mockMvc;
  
      @Spy
      List&lt;Task&gt; allTasks = new ArrayList&lt;Task&gt;();
  
     /* @Spy
      List&lt;TaskSessionModel&gt; taskSessionModelList = new ArrayList&lt;TaskSessionModel&gt;();*/
  
      @BeforeClass
      public void setUp() {
          //    Mockito.reset(taskServiceMock);
          MockitoAnnotations.initMocks(this);
          //       taskSessionModelList = getAllTaskSessionModels();
          allTasks = getAllTasks();
          this.mockMvc = MockMvcBuilders.standaloneSetup(taskController).build();
      }
  
      @Test
      public void testGetAllTasks() throws Exception {
  
          //  when(taskSessionDao.findAllByTestSession(1l)).thenReturn(taskSessionModelList);
          when(taskServiceMock.getAllTasks(1l)).thenReturn(allTasks);
  
          mockMvc.perform(get("/v1/testSessions/{testSessionId}/tasks", 1l)
                  .accept(MediaType.APPLICATION_JSON_VALUE))
                  .andExpect(status().isOk())
                  .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
                  .andExpect(jsonPath("$", hasSize(2)))
                  .andExpect(jsonPath("$[0].name", is("Average")));
  
  
          List&lt;Task&gt; expTaskList = taskController.getAllTasks(1l);
          verify(taskServiceMock, times(2)).getAllTasks(1l);
          verifyNoMoreInteractions(taskServiceMock);
          assertEquals(allTasks, expTaskList);
  
      }
  </code></pre>
  
  <p>But if i write the same unit test by using the WebApplicationContext .. I will get error and test cases will failed :</p>
  
  <pre><code>java.lang.AssertionError: Status 
  Expected :200
  Actual   :500
   &lt;Click to see difference&gt;
  
  
      at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:60)
      at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:89)
      at org.springframework.test.web.servlet.result.StatusResultMatchers$10.match(StatusResultMatchers.java:654)
      at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:152)
      at com.blueoptima.dt.controller.TaskControllerIntegrationTest.testGetAllTasks(TaskControllerIntegrationTest.java:46)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
      at org.testng.internal.MethodInvocationHelper$1.runTestMethod(MethodInvocationHelper.java:200)
      at org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:171)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:212)
      at org.testng.internal.Invoker.invokeMethod(Invoker.java:707)
      at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
      at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
      at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
      at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
      at org.testng.TestRunner.privateRun(TestRunner.java:767)
      at org.testng.TestRunner.run(TestRunner.java:617)
      at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
      at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
      at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
      at org.testng.SuiteRunner.run(SuiteRunner.java:240)
      at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
      at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
      at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
      at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
      at org.testng.TestNG.run(TestNG.java:1057)
      at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:74)
      at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:124)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
  </code></pre>
  
  <p>I don't know what's the wrong? I tried almost all the solution for the WebApplicationContext setup(see the first code) it's in the same way as I see .. on this website and mostly configuration in spring official website and other after googling it but still error remains same? 
  Have a look  into this ! Cheers !!</p>