相关疑难解决方法(0)

如何使用spring 3.2新的mvc测试登录用户

这工作正常,直到我必须测试需要登录用户的服务,如何将用户添加到上下文:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-test.xml")
@WebAppConfiguration
public class FooTest {
@Autowired
private WebApplicationContext webApplicationContext;

private MockMvc mockMvc;

@Resource(name = "aService")
private AService aService; //uses logged in user

@Before
public void setup() {
    this.mockMvc = webAppContextSetup(this.webApplicationContext).build();
}
Run Code Online (Sandbox Code Playgroud)

java junit spring spring-mvc

20
推荐指数
2
解决办法
2万
查看次数

spring MockMvc测试模型属性

我有一个控制器方法,我必须写一个junit测试

@RequestMapping(value = "/new", method = RequestMethod.GET)
public ModelAndView getNewView(Model model) {
    EmployeeForm form = new EmployeeForm()
    Client client = (Client) model.asMap().get("currentClient");
    form.setClientId(client.getId());

    model.addAttribute("employeeForm", form);
    return new ModelAndView(CREATE_VIEW, model.asMap());
}
Run Code Online (Sandbox Code Playgroud)

使用spring mockMVC进行Junit测试

@Test
public void getNewView() throws Exception {
    this.mockMvc.perform(get("/new")).andExpect(status().isOk()).andExpect(model().attributeExists("employeeForm")
            .andExpect(view().name("/new"));
}
Run Code Online (Sandbox Code Playgroud)

我得到NullPointerException作为model.asMap().get("currentClient"); 在运行测试时返回null,如何使用spring mockmvc框架设置该值

java junit spring spring-mvc

10
推荐指数
1
解决办法
6446
查看次数

具有会话属性的mvc控制器测试

我正在尝试使用此签名测试方法:

 @Autowired
HttpSession http_Session;
@RequestMapping(method=RequestMethod.GET, value="/search/findByName")
public @ResponseBody List<Map> search(@RequestParam(value="name", required=true) String name){
Integer user_id = http_Session.getAttribute("userinfo");
}
Run Code Online (Sandbox Code Playgroud)

userinfo是一个类,其中包含有关用户的信息,并在用户登录时设置在会话范围内.但是当我尝试测试时:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration 
@ContextConfiguration(locations = {
   "classpath:/META-INF/applicationContext.xml"})

 public class userControllerTest {

private MockMvc mockMvc;  
@Autowired
private WebApplicationContext webApplicationContext;

@Before 
public void setUp() {
    MockitoAnnotations.initMocks(this);
    this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build();
 }  
 @Test
 public void userTest() throws Exception {
     mockMvc.perform(MockMvcRequestBuilders.get("/search/findByName").param("name", "bob"))
          .andDo(print())
          .andExpect(MockMvcResultMatchers.status().isOk());
    }
Run Code Online (Sandbox Code Playgroud)

问题是userinfo类属性是在另一个方法中设置的,所以当我尝试在这个方法中访问它时,我得到了一个N​​ullPointerException,并且通过自动装配httpSession,我为每个必须测试的方法获得了一个新的Session.

我应该如何处理session属性,我的方法不接受会话参数,并且对于每个测试,它都会创建一个带有新会话的WebApplicationContext.

attributes controller spring-mvc junit4 httpsession

3
推荐指数
1
解决办法
8036
查看次数

如何在 Spring Junit 中创建会话

我有这样的层:

Spring Controller -> 服务层 -> Dao 层(JPA)。

我想编写服务和控制器的测试用例。在另一个 Junit 中会调用控制器,控制器会调用服务,服务层获取数据库信息等等。

在这种情况下,我不想模拟,我只想编写 junit 测试用例(我必须调用服务并且服务必须从数据库中获取真实数据)。

我只有一个问题,服务层从会话中获取用户 ID。我得到了带有自动装配注释的会话。如何在测试用例期间创建假会话?

ps 我认为 mock 不适合我......因为我不会嘲笑我的服务,我想用真实的数据库数据创建真正的控制器调用......

java junit spring unit-testing spring-test

3
推荐指数
1
解决办法
2万
查看次数