使用mockito发送对象执行

时间:2016-08-16 15:59:03

标签: java junit

您好我试图测试方法:

@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。我想发送包含这些字段的对象。

1 个答案:

答案 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