春の webapp で、コントローラーをテストしようとしています。
@Controller
@RequestMapping(value="/Position")
public class PositionController {
@Autowired
PositionRepository positionRepository;
@RequestMapping(method=RequestMethod.GET, value="/search/infoforPosition)
public @ResponseBody List<Map<String, Object>> read(@RequestParam(value="id", required=true) Integer id){
List<Map<String, Object>> res = positionRepository.infoPerPosition(id);
return res;
}
}
私のテストコードは次のようになります。
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations={"classpath*:/META-INF/spring/applicationContext.xml"})
private MockMvc mockMvc;
@Mock
PositionController PositionMock;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(PositionMock).build();
}
@Test
public void test() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/Position/search/infoforPosition")
.param("id", "435651")
.accept("application/json"))
.andDo(print())
.andExpect(MockMvcResultMatchers.status().isOk());
}
テストを実行すると、次のようになりました。
MockHttpServletRequest:
HTTP Method = GET
Request URI = /Position/search/infoforPosition
Parameters = {id=[435651]}
Headers = {Accept=[application/json]}
Handler:
Type = org.controllers.PositionController
Method = public java.util.List<java.util.Map<java.lang.String, java.lang.Object>> org.controllers.PositionController.read(java.lang.Integer)
Async:
Was async started = false
Async result = null
Resolved Exception:
Type = null
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
MockHttpServletResponse:
Status = 200
Error message = null
Headers = {Content-Type=[application/json;charset=UTF-8]}
Content type = application/json;charset=UTF-8
Body = []
Forwarded URL = null
Redirected URL = null
Cookies = []
ChromeブラウザでURLをテストすると、次のようになりました:
[{"id":435651,"Position_id":33,"section":64509}]
pom.xml ファイルに jackson-mapper-asl.jar と jackson-core-asl.jar を追加しました。なぜ応答ステータスが 200 なのかわかりませんが、データを取得できなかったので、単体テストはどのようにパスしましたか? breakpoint を置くと、アプリケーションがメソッドを実行していないようです。
どんな助けでも大歓迎です:)