2016-06-27 4 views
1

Я новичок в Spring Boot 1.4 и стараюсь использовать новые функции. У меня простой контроллер Spring MVC.Spring Boot 1.4 Тестирование

@Controller 
public class IndexController { 
    @RequestMapping("/") 
    String index(){ 
    return "index"; 
    } 
} 

Контроллер возвращается шаблон Thymeleaf с содержащей строкой Hello

я написал следующее испытание блока, и это работает прекрасно:

@RunWith(SpringRunner.class) 
@WebMvcTest(IndexController.class) 
public class SpringMvcTestApplicationTests { 


private MockMvc mockMvc; 
@Before 
public void setUp() { 
    mockMvc = MockMvcBuilders.standaloneSetup(new IndexController()).build(); 
} 

@Test 
public void testIndex() throws Exception{ 

    MvcResult result= this.mockMvc.perform(get("/")) 
      .andExpect(status().isOk()) 
      .andExpect(view().name("index")) 
      .andReturn(); 
    String content = result.getResponse().getContentAsString(); 
    assertNotNull(content); 
    } 
} 

Но я прочитал Многих из аннотации предоставляют дополнительную автоматическую конфигурацию, характерную для тестирования. Например, если вы используете @WebMvcTest, вы можете @Autowire полностью сконфигурированный экземпляр MockMvc.. Я также видел примеры autowiring MockMvc.

Но после того, как я удалил метод @Before, после добавления метода @Before, после завершения процедуры тестирования, я снова добавлю код автоувеличивания.

@Autowired 
private MockMvc mockMvc; 

Ошибка утверждение:

java.lang.AssertionError: Status 
Expected :200 
Actual :401 

Второй вопрос, я хочу, чтобы проверить содержимое, что Thymeleaf возвращается. Я тестировал с:

.andExpect(content().string("Hello")) 

также

.andExpect(content().string(Matchers.containsString("Hello"))) 

, а также

assertEquals("Hello", content); 

На рассмотрении, я обнаружил, что содержимое является пустая строка, и поэтому тест не пройден с:

org.junit.ComparisonFailure: 
Expected :Hello 
Actual : 

Как проверить содержимое.

Заранее спасибо.

ответ

1

Первый выпуск:

Проблемы с использованием @WebMvcTest для autowire вашего MockMvc является то, что он, кажется, включена защитой по умолчанию (см https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/api/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTest.html), который в результате вашего 401 Несанкционированного кода статуса для утверждения, так как Запрос GET для «/» не выполняет проверки безопасности. Для вашего простого случая, возможно, проще всего использовать «MockMvcBuilders.standaloneSetup()», чтобы создать свой MockMvc.

Вы можете добавить один вкладыш аннотацию (не забудьте импортировать пакет также) для предотвращения безопасности MockMvc, выполнив:

@WebMvcTest(IndexController.class) 
@AutoConfigureMockMvc(secure=false) 
public class IndexControllerTest { 
+0

Вы правы, это связано это связано с проблемой безопасности. Я специально смотрю, как автообновить MockMvc с аннотацией WebMvcTest. Несколько статей показывают это, но у меня нет доступа к исходному коду. Несколько примеров: [Официальная версия здесь] (https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot-1-4) (Тестирование срединного фрагмента MVC), [здесь] (http://info.michael-simons.eu/2016/04/17/8-new-features-youll-get-with-spring-boot-1-4/), [а также здесь] (http:// /moodle2.insa-lyon.fr/pluginfile.php/73540/mod_resource/content/2/spring-boot-lab.html#testing-mockmvc) – user2693135

+0

См. текущее редактирование –

+0

Проблема остается. Я разместил код на GitHub [Нажмите здесь] (https: // github.com/ximanta/blog-spring-mvc-test) – user2693135