2016-09-15 7 views
0

Я создаю один класс Spring Junit для тестирования одного из моих любимых api. Но когда я позвонил, он вернул мне 404, и тестовый пример не удался. Тест класс Junit является:Spring Junit test возвращает 404 код ошибки

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ContextConfiguration(locations={"classpath:config/spring-commonConfig.xml"}) 
public class SampleControllerTests { 

public static final MediaType APPLICATION_JSON_UTF8 = new MediaType(
     MediaType.APPLICATION_JSON.getType(), 
     MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8")); 

private MockMvc mockMvc; 
@Autowired 
private WebApplicationContext webApplicationContext; 

@Before 
public void setup() { 
    this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); 
} 

@Test 
public void testSampleWebService() throws Exception { 
    mockMvc.perform(post("/sample/{userJson}", "{\"id\":\"102312121\",\"text\":\"Hi user\",\"key\":\"FIRST\"}")) 
    .andExpect(status().isOk()) 
    .andExpect(jsonPath("$result", is("Hello "))) 
    .andExpect(jsonPath("$answerKey", is(""))); 
} 
} 

Класс RestController является:

@RestController 
public class SampleController { 

private static final Logger logger = LoggerFactory.getLogger(SampleController.class); 
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").create(); 

@Autowired private SampleService sService; 


@RequestMapping(value = "${URL.SAMPLE}", method = RequestMethod.POST) 
@ResponseBody 
public String sampleWebService(@RequestBody String userJson){ 
    String output=""; 
    try{ 
     output = sService.processMessage(userJson); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    return output; 
} 
} 

Я загрузки URL-адрес строки из файла свойств. Таким образом, я не жестко закодировал URL-адрес в классе контроллера, но динамически отображал его, поэтому я загружаю файлы свойств через класс, о котором я упоминал ниже.

"URL.SAMPLE =/образец/{userJson}"

Класс, который считывает файл свойства, где определяется URL:

@Configuration 
@PropertySources(value = { 
    @PropertySource("classpath:/i18n/urlConfig.properties"), 
    @PropertySource("classpath:/i18n/responseConfig.properties") 
}) 
public class ExternalizedConfig { 

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 
} 

кода ошибки 404 означает, его подключается к серверу, но не получает источник, который мы запрашивали. Может ли кто-нибудь сказать мне, в чем проблема?

Спасибо, Atul

ответ

0

Спасибо за ваш ответ.

Я внес изменения, которые вы предложили, но ошибка все еще сохранялась.

Так что снова я ищу с ошибкой и нашел решение.

Я внес изменения в файл xml Spring. Например:

Добавить пространство имен в xml-файле для mvc.

xmlns:mvc="http://www.springframework.org/schema/mvc" 

http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd 

    <context:component-scan base-package="XXX" /> 
<mvc:annotation-driven /> 

После этого он работает.

1

Вы в настоящее время пытаетесь иметь вход JSON разобранный из тела запроса с использованием @RequestBody; однако вы не отправляете контент в качестве тела запроса.

Вместо этого вы пытаетесь закодировать тело запроса в URL-адресе, но оно не будет работать так.

Чтобы исправить это, вам необходимо выполнить следующее.

  1. Используйте /sample как путь запроса (не /sample/{userJson})
  2. Обеспечить ввод тест JSON в качестве тела запроса.

Вы можете сделать последнее следующим образом.

@Test 
public void testSampleWebService() throws Exception { 
    String requestBody = "{\"id\":\"102312121\",\"text\":\"Hi user\",\"key\":\"FIRST\"}"; 

    mockMvc.perform(post("/sample").content(requestBody)) 
     .andExpect(status().isOk()) 
     .andExpect(jsonPath("$result", is("Hello "))) 
     .andExpect(jsonPath("$answerKey", is(""))); 
}