Estoy usando JUnit para probar mi Primavera controlador MVC. A continuación es mi método que devuelve un index.jsp la página y muestra Hello World en la pantalla –

@RequestMapping(value = "index", method = RequestMethod.GET)
public HashMap<String, String> handleRequest() {
    HashMap<String, String> model = new HashMap<String, String>();

    String name = "Hello World";
    model.put("greeting", name);

    return model;
}

Y la de abajo es mi prueba de JUnit para el método anterior:

public class ControllerTest {

    private MockMvc mockMvc;

    @Before
    public void setup() throws Exception {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");

        this.mockMvc = standaloneSetup(new Controller()).setViewResolvers(viewResolver).build();
    }

    @Test
    public void test01_Index() throws Exception {

    mockMvc.perform(get("/index")).andExpect(status().isOk()).andExpect(content().contentType("application/json"))
        .andExpect(jsonPath("$.greeting").value("Hello World"));

    }
}

Por encima de junit estaba funcionando bien, cuando yo depurar pero cuando me encontré con la junit como run as junit, me dio este error –

MockMvc : Circular view path [view]: would dispatch back to the current handler URL [/view] again

Así que para solucionar esto y he seguido este tutorial y después de que me estoy haciendo esta excepción –

java.lang.AssertionError: Content type not set
at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:39)
at org.springframework.test.util.AssertionErrors.assertTrue(AssertionErrors.java:72)
at org.springframework.test.web.servlet.result.ContentResultMatchers$1.match(ContentResultMatchers.java:75)
at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:141)
at com.ebay.personalization.bullseye.zookeeper.test.ZookeeperControllerTest.test01_Index(ZookeeperControllerTest.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:76)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:602)
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.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
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.junit.runners.ParentRunner.run(ParentRunner.java:236)
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)

¿Qué estoy haciendo mal aquí? En el .página jsp que muestra Hello World..

Estoy siguiendo en mi pregunta anterior aquí

OriginalEl autor AKIWEB | 2014-03-04

2 Comentarios

  1. 10

    Veo un par de problemas con la solicitud asignada método:

    Idealmente, usted debe tener un @ResponseBody anotación en su método, para indicar que el contenido devuelto es para ser distribuido:

    @RequestMapping(value = "index", method = RequestMethod.GET)
    @ResponseBody
    public HashMap<String, String> handleRequest() {
    HashMap<String, String> model = new HashMap<String, String>();
    String name = "Hello World";
    model.put("greeting", name);
    return model;
    }

    Ahora con este hecho, la prueba puede tener este aspecto:

    mockMvc.perform(get("/index").contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(content().contentTypeCompatibleWith("application/json"))
    .andExpect(jsonPath("$.greeting").value("Hello World"));

    En su caso, lo que sucede es que la Primavera está tratando de averiguar el nombre de la vista y el nombre de la vista como index, que es de nuevo el controlador de ruta, por lo tanto la visión circular error de ruta de acceso que usted está viendo.

    Gracias.. funciona bien.. yo también tengo pregunta similar, here. Vea si usted puede ayudarme a salir de allí.

    OriginalEl autor Biju Kunjummen

  2. 1

    Usted debe también comprobar su solicitud de asignaciones:

    Hace get(«/…») coincide con @RequestMapping ?

    Si el handleRequest nunca es llamada, usted va a obtener el mismo error Content type not set.

    OriginalEl autor Matthias M

Dejar respuesta

Please enter your comment!
Please enter your name here