java - 模拟Mvc。 VewResolver 工作后检查 url?

标签 java spring spring-mvc mocking

我有这个 Controller 方法:

@RequestMapping(value ="/goToCandidateMenu")
    public String goToCandidateMenu() {
        return "candidateMenu";
    }

如何检查(使用 MockMVC)

  1. 返回此方法后的url?

  2. 将使用的文件系统 jsp 页面上的位置?

BeanConfig.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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">

    <!-- Включаем опцию использования конфигурационных аннотаций (@Annotation-based configuration)-->
    <context:annotation-config />


    <context:component-scan base-package="com.epam.hhsystem.jpa" />
    <context:component-scan base-package="com.epam.hhsystem.services" />

    <!-- Файл с настройками ресурсов для работы с данными (Data Access Resources) -->
    <import resource="data.xml" />
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

跟踪:

java.lang.AssertionError: Forwarded URL expected:</WEB-INF/views/candidateMenu.jsp> but was:<candidateMenu>
    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.MockMvcResultMatchers$1.match(MockMvcResultMatchers.java:85)
    at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:141)
    at controllers.CandidateControllerTest.testgoToCandidateMenuMockMvc(CandidateControllerTest.java:117)
    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:45)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
    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:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    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:300)
    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)

方法:

@Test 
    public void testgoToCandidateMenuMockMvc() throws Exception { 

        MockHttpServletRequestBuilder request = MockMvcRequestBuilders.get("/goToCandidateMenu");
        ResultActions result = mockMvc.perform(request);
        result.andExpect(status().isOk());
        result.andExpect(MockMvcResultMatchers.view().name("candidateMenu"));
        result.andExpect(MockMvcResultMatchers.forwardedUrl("/WEB-INF/views/candidateMenu.jsp"));

     }

最佳答案

您需要使用MockMvcResultMatchers方法view()forwardedUrl() .

MockMvc mockMvc = // setup your MockMvc instance;
mockMvc.perform(
    get("/goToCandidateMenu"))
    .andExpect(status().isOk())
    .andExpect(view().name("candidateMenu"))
    .andExpect(forwardedUrl("/WEB-INF/views/candidateMenu.jsp")); // depending on your view resolver

请注意,forwardedUrl 不是文件系统上的文件,它只是相对于应用程序上下文路径的 URL。

关于java - 模拟Mvc。 VewResolver 工作后检查 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19177655/

相关文章:

java - 在 Spring 3/Spring Security 2.0.5 中检测 session 超时

Java Lucene 过滤器似乎没有像预期的那样改变查询搜索空间(我)

Java:this 指向方法的调用者,但指向变量的当前类。为什么?

spring - 使用 ResponseEntity<Resource> 发送自定义 Content-Type

spring-mvc - EL1007E : Property or field 'fieldName' cannot be found on null

java - 大型应用程序实现 DTO/ViewModel 的 Spring MVC 最佳实践?

java - MVC 和带有 Set<> 的对象

java - 如何使用 setOnClickListener 和 setOnTouchListener +

java - Spring 异步方法不适用于 EndPoint

java - Maven 项目中缺少 servlet-api