[英]Send list to controller with MockMvc
我想在表單上的另一個對象內發送列表。 在這種情況下,它是具有角色列表的用戶。 在表單上,我有一個選擇多個,用於發送角色ID列表。 我有一個帶RoleFormatter的自定義FormatterRegistrar。 這是我的代碼:
我的模特:
@Entity
@Table(name = "USER")
@SequenceGenerator(name = "user_seq", sequenceName = "user_seq", initialValue = 1)
public class User implements Serializable {
@Id
@GeneratedValue(generator = "user_seq", strategy = GenerationType.SEQUENCE)
private Long id;
@NotEmpty
@Size(min = 1, max = 50)
@Column(name = "codigo", nullable = false)
private String codigo;
@Size(min = 3, max = 50)
@Column(name = "name")
private String name;
....
@NotNull
@NotEmpty
@ManyToMany
@JoinTable(name = "user_roles",
joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") },
inverseJoinColumns = { @JoinColumn(name = "role_id", referencedColumnName = "id") }
)
private Set<Role> roles = new HashSet<>();
//getters & setters
}
我的控制器:
@Controller
@SessionAttributes("user)
@RequestMapping(value = "/users")
public class UserController {
@PreAuthorize("hasAuthority('users.admin')")
@RequestMapping(value = "update", method = RequestMethod.POST)
public String save(@Valid @ModelAttribute User user, BindingResult result, SessionStatus status, RedirectAttributes ra,
HttpServletRequest request) {
//Save user
return "detail";
}
}
我的測試:
public class UserControllerTest {
@Mock
private UserService userService;
@InjectMocks
private UserController userController;
private MockMvc mockMvc;
@Before
public void setup() {
// Process mock annotations
MockitoAnnotations.initMocks(this);
// Setup Spring test in standalone mode
this.mockMvc = MockMvcBuilders.standaloneSetup(userController)
.setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()).build();
}
@Test
public void testSave() throws Exception {
User user = new User();
// Without errors
this.mockMvc.perform(post("/users/update")
.param("id", "1")
.param("name", "Jonh")
.param("roles.id", "1", "2")
.sessionAttr("user", user))
.andExpect(view().name("detail"))
.andExpect(model().hasNoErrors()));
}
}
通過此測試,我總是得到空角色。 如何提交ID列表? 如何發送清單?
這個答案可能為時已晚,但是我最近找到了解決該問題的方法。
我遇到了同樣的問題,並搜索了不同的博客,我發現了這個庫: https : //github.com/f-lopes/spring-mvc-test-utils
只需在您的項目和用戶測試中導入庫,就必須這樣做:
//here, the method might be called 'save' or 'update'. You just put in there the name of the method for updating a user
doNothing().when(userService).save(any(User.class));
User user = new User();
//set user's properties
user.setRoles(Arrays.asList(
new Role(), //here you set role's properties
new Role() //here as well
));
//here comes the magic
mockMvc.perform(postForm("/users/update", user))
.andExpect(view().name("detail"))
.andExpect(model().hasNoErrors()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.