您好我试图测试方法:
@RequestMapping(value="addOwner", method = RequestMethod.POST)
public String addOwnerDo(@Valid @ModelAttribute(value = "Owner") Owner owner, BindingResult result) {
if (result.hasErrors()){
return "addOwner";
}
ownerService.add(owner);
return "redirect:addOwner";
}
所以我写了这个单元测试用例:
@Test
public void testAddOwnerPost() throws Exception{
mockMvc.perform(post("/addOwner")
.param("firstName", "Adam")
.param("lastName", "Kowalski")
.requestAttr("pet", new Pet())
.requestAttr("phone", new Phone()))
.andExpect(status().is3xxRedirection());
}
问题是,所有者实体包含Pet和Phone类型的字段:
@Entity
public class Owner {
@Id
@GeneratedValue
private int id;
@Column(name = "first_name")
@Size(min=2,max=15,message="{Size}")
private String firstName;
@Column(name = "last_name")
@Size(min=2,max=15,message="{Size}")
private String lastName;
@Valid
@NotNull(message="{NotNull}")
@OneToOne(cascade = CascadeType.ALL,orphanRemoval=true)
private Pet pet;
@Valid
@NotNull(message="{NotNull}")
@OneToOne(cascade = CascadeType.ALL, orphanRemoval=true)
private Phone phone;
因此,测试时对象发送给控制器的Pet和Phone值等于null。我想发送包含这些字段的对象。
答案 0 :(得分:1)
我建议你做以下事情:
在您的测试类上创建两个属性:
private Pet pet = new Pet();
private Phone phone = new Phone();
在public void testAddOwnerPost()
创建新方法之前:@Before
public void setUp()
然后在setUp类中设置我们的所有属性。
如果您不关心手机和宠物的价值,建议您使用Mockito.anyString() // for a string value
0