Тестирование Spring отображения аннотации MVC

Вы, кажется, смешиваете сборки x86 и x64.

Если вы хотите создать свое приложение с использованием x64-компилятора, вам нужно получить готовые двоичные файлы для x64 как для Box2D, так и для SFML.

Если вы хотите создать свое приложение с использованием компилятора x86, вам понадобятся предварительно подготовленные двоичные файлы для x86 как для Box2D, так и для SFML.

Но поскольку я не вижу готовых двоичных файлов для Box2D, вы, вероятно, скомпилировали свои собственные двоичные файлы. Тогда вам просто нужно убедиться, что вы выбрали правильный компилятор при сборке Box2D.

19
задан Cœur 9 May 2018 в 03:24
поделиться

2 ответа

Вы можете использовать AnnotationMethodHandlerAdapter и его метод handle программно. Это разрешит метод для данного запроса и выполнит его. К сожалению, это немного косвенно. На самом деле в AMHA есть частный класс ServletHandlerMethodResolver , который отвечает только за разрешение метода для данного запроса. Я только что подал запрос на улучшение по этой теме, так как я бы тоже хотел увидеть это возможным.

А пока вы можете использовать, например, EasyMock , чтобы создать макет вашего класса контроллера, ожидайте, что данный метод будет вызван, и передайте этот макет в дескриптор .

Контроллер:

@Controller
public class MyController {

  @RequestMapping("/users")
  public void foo(HttpServletResponse response) {

    // your controller code
  }
}

Тест:

public class RequestMappingTest {

  private MockHttpServletRequest request;
  private MockHttpServletResponse response;
  private MyController controller;
  private AnnotationMethodHandlerAdapter adapter;


  @Before
  public void setUp() {

    controller = EasyMock.createNiceMock(MyController.class);

    adapter = new AnnotationMethodHandlerAdapter();
    request = new MockHttpServletRequest();
    response = new MockHttpServletResponse();
  }


  @Test
  public void testname() throws Exception {

    request.setRequestURI("/users");

    controller.foo(response);
    EasyMock.expectLastCall().once();
    EasyMock.replay(controller);

    adapter.handle(request, response, controller);

    EasyMock.verify(controller);
  }
}

С уважением, Олли

13
ответ дан 30 November 2019 в 04:48
поделиться

Решение Олли охватывает тестирование конкретного примера аннотации, но что насчет более широкого вопроса о том, как тестировать все остальные различные аннотации Spring MVC. Мой подход (который может быть легко распространен на другие аннотации) был бы следующим

import static org.springframework.test.web.ModelAndViewAssert.*;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({/* include live config here
    e.g. "file:web/WEB-INF/application-context.xml",
    "file:web/WEB-INF/dispatcher-servlet.xml" */})
public class MyControllerIntegrationTest {

    @Inject
    private ApplicationContext applicationContext;

    private MockHttpServletRequest request;
    private MockHttpServletResponse response;
    private HandlerAdapter handlerAdapter;
    private MyController controller;

    @Before
    public void setUp() {
       request = new MockHttpServletRequest();
       response = new MockHttpServletResponse();
       handlerAdapter = applicationContext.getBean(HandlerAdapter.class);
       // I could get the controller from the context here
       controller = new MyController();
    }

    @Test
    public void testFoo() throws Exception {
       request.setRequestURI("/users");
       final ModelAndView mav = handlerAdapter.handle(request, response, 
           controller);
       assertViewName(mav, null);
       assertAndReturnModelAttributeOfType(mav, "image", Image.class);
    }
}

Я также написал запись в блоге об интеграционном тестировании аннотаций Spring MVC.

7
ответ дан 30 November 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: