title: Status expected:<200> but was:<404> in spring test
body: <p>I have this class:</p>
  
  <pre><code>    package controllers;
  
      import static org.junit.Assert.*;
      import static org.mockito.Mockito.mock;
      import static org.mockito.Mockito.times;
      import static org.mockito.Mockito.verify;
      import static org.mockito.Mockito.when;
  
      import java.util.HashSet;
  
      import org.junit.Before;
      import org.junit.Test;
      import org.junit.runner.RunWith;
      import org.mockito.InjectMocks;
      import org.mockito.Mock;
      import org.mockito.MockitoAnnotations;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.test.context.ContextConfiguration;
  
  
      import org.springframework.ui.Model;
      import org.springframework.web.context.WebApplicationContext;
  
      import com.epam.hhsystem.model.candidate.Candidate;
      import com.epam.hhsystem.services.CandidateService;
      import com.epam.hhsystem.web.controllers.CandidateMenuController;
      import org.springframework.test.context.web.WebAppConfiguration;
      import org.springframework.test.context.junit4.*;
      import org.springframework.test.web.servlet.MockMvc;
      import org.springframework.test.web.servlet.ResultActions;
      import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
      import org.springframework.test.web.servlet.setup.MockMvcBuilders;
  
  
      import org.springframework.test.web.servlet.request.*;
  
      import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
      import static org.hamcrest.Matchers.*;
      import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
      import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
  
  
      @ContextConfiguration(locations = { "classpath:/test/BeanConfig.xml" })
      @RunWith(SpringJUnit4ClassRunner.class)
      @WebAppConfiguration
      public class CandidateControllerTest {
  
          @Mock(name = "candidateService")
          private CandidateService candidateService;
  
          @InjectMocks
          private CandidateMenuController candidateMenuController = new CandidateMenuController();
  
          @Autowired
          WebApplicationContext wac;
  
          MockMvc mockMvc;
  
          @Before
          public void before() {
              MockitoAnnotations.initMocks(this);
                this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).dispatchOptions(true).build();
  
          }
  @Test 
      public void testgoToCandidateMenuMockMvc() throws Exception { 
          //MockHttpServletRequestBuilder request = MockMvcRequestBuilders.get("/goToCandidateMenu");
  
  
          MockHttpServletRequestBuilder request = MockMvcRequestBuilders.get("/goToCandidateMenu");
          ResultActions result = mockMvc.perform(request);
          result.andExpect(status().isOk());
       }
  }
  </code></pre>
  
  <p>When I execute it I see:</p>
  
  <pre><code>java.lang.AssertionError: Status expected:&lt;200&gt; but was:&lt;404&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$5.match(StatusResultMatchers.java:549)
  at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:141)
  at controllers.CandidateControllerTest.testgoToCandidateMenuMockMvc(CandidateControllerTest.java:104)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  at java.lang.reflect.Method.invoke(Method.java:597)
  at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
  at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
  at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
  at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
  at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
  at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
  at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
  at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
  at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
  at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
  at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
  at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
  at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
  at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
  at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
  at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
  at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
  at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
  at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
  at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
  at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
  at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
  at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
  at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
  at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
  </code></pre>
  
  <p>Controller code:</p>
  
  <pre><code>@Controller
  public class CandidateMenuController extends AbstractController {
  ...
  @RequestMapping("/goToCandidateMenu")
      public String goToCandidateMenu() {
          return "candidateMenu";
      }
  ...
  }
  </code></pre>
  
  <p>Can you help me to fix my problem?</p>
  
  <p><strong>UPDATE</strong></p>
  
  <p>BeanConfig.xml: </p>
  
  <pre><code> &lt;?xml version="1.0" encoding="UTF-8"?&gt;
      &lt;beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
          xmlns:context="http://www.springframework.org/schema/context"
          xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang"
          xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
          xmlns:util="http://www.springframework.org/schema/util"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
              http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
              http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd
              http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
              http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"&gt;
  
          &lt;!-- Включаем опцию использования конфигурационных аннотаций (@Annotation-based configuration)--&gt;
          &lt;context:annotation-config /&gt;
  
  
          &lt;context:component-scan base-package="com.epam.hhsystem.jpa" /&gt;
          &lt;context:component-scan base-package="com.epam.hhsystem.services" /&gt;
  
          &lt;!-- Файл с настройками ресурсов для работы с данными (Data Access Resources) --&gt;
          &lt;import resource="data.xml" /&gt;
  
      &lt;/beans&gt;
  </code></pre>
  
  <p>data.xml</p>
  
  <pre><code>&lt;?xml  version="1.0" encoding="UTF-8"?&gt;
  &lt;beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang"
      xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:util="http://www.springframework.org/schema/util"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
          http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
          http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
          http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"&gt;
  
  &lt;!-- Настраивает управление транзакциями с помощью аннотации @Transactional --&gt;
      &lt;tx:annotation-driven transaction-manager="transactionManager" /&gt;
  
      &lt;!-- Менеджер транзакций --&gt;
      &lt;bean id="transactionManager"
          class="org.springframework.orm.hibernate4.HibernateTransactionManager"&gt;
          &lt;property name="sessionFactory" ref="sessionFactory" /&gt;
      &lt;/bean&gt;
  
      &lt;!-- Непосредственно бин dataSource --&gt;
      &lt;bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource"
          p:driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
          p:url="jdbc:sqlserver://10.16.9.52:1433;databaseName=hhsystemTest;"
          p:username="userNew" 
          p:password="Pass12345" /&gt;
  
      &lt;!-- Настройки фабрики сессий Хибернейта --&gt;
      &lt;bean id="sessionFactory"
          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"&gt;
          &lt;property name="dataSource" ref="dataSource" /&gt;
          &lt;property name="configLocation"&gt;
              &lt;value&gt;classpath:test/hibernate.cfg.xml&lt;/value&gt;
          &lt;/property&gt;
  
          &lt;property name="hibernateProperties"&gt;
              &lt;props&gt;
                  &lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt;
                  &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.SQLServerDialect&lt;/prop&gt;
                  &lt;prop key="hibernate.connection.charSet"&gt;UTF-8&lt;/prop&gt;
  &lt;!--                &lt;prop key="hibernate.hbm2ddl.auto"&gt;create-drop&lt;/prop&gt; --&gt;
          &lt;/props&gt;
          &lt;/property&gt;
      &lt;/bean&gt;
  
  &lt;/beans&gt;
  </code></pre>