9 EYLÜL 2009, ÇARŞAMBA
Nasıl birim test için Spring MVC denetleyicisi @PathVariable kullanarak?
Basit açıklamalı denetleyicisi, buna benzer var:
@Controller
public class MyController {
@RequestMapping("/{id}.html")
public String doSomething(@PathVariable String id, Model model) {
// do something
return "view";
}
}
ve böyle bir birim testi ile test etmek istiyorum:
public class MyControllerTest {
@Test
public void test() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("/test.html");
new AnnotationMethodHandlerAdapter()
.handle(request, new MockHttpServletResponse(), new MyController());
// assert something
}
}
Sorun AnnotationMethodHandlerAdapter.() işleyicisi yöntemi bir özel durum atar:
java.lang.IllegalStateException: Could not find @PathVariable [id] in @RequestMapping
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.resolvePathVariable(AnnotationMethodHandlerAdapter.java:642)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolvePathVariable(HandlerMethodInvoker.java:514)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:262)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:146)
CEVAP
16 Mart 2010, Salı
Entegrasyon testi neyin peşinde olduğunuzu Bahar başvuru kılavuzunda terminoloji dayalı derim. Nasıl böyle bir şey yapıyor:
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 testDoSomething() throws Exception {
request.setRequestURI("/test.html");
final ModelAndView mav = handlerAdapter.handle(request, response,
controller);
assertViewName(mav, "view");
// assert something
}
}
Daha fazla bilgi için blog entry about integration testing Spring MVC annotations bir mektup yazdım.
Bunu Paylaş:
Nasıl birim test soyut sınıflar için: ...
Nasıl RequireJS birim test için sahte ...
Nasıl veritabanı sorguları ile bir nes...
Kullanarak Birim Test için IoC...
Nasıl C dosya sistemi dışarı alay mı# ...