前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Junit报错:Argument(s) are different! Wanted:

Junit报错:Argument(s) are different! Wanted:

作者头像
凡人飞
发布2020-09-20 20:26:15
1.7K0
发布2020-09-20 20:26:15
举报
文章被收录于专栏:指缝阳光指缝阳光
  1. 在controller中的方法如下:
代码语言:javascript
复制
/**
     * 处理注册的提交信息
     * @param spitter
     * @return
     */
    @RequestMapping(value = "/register", method = RequestMethod.POST)
    public String processRegister(Spitter spitter){
        spitterRepository.save(spitter);

        //跳转到个人信息页面
        return "redirect:/spitter/" + spitter.getUsername();
    }
  1. 在Junit类中的测试方法为:
代码语言:javascript
复制
    @Test
    public void shouldProcessRegistration() throws Exception {
        SpitterRepository mockRepository = mock(SpitterRepository.class);

        Spitter unsaved = new Spitter("xu", "jiafei", "dale", "123456");
        Spitter saved = new Spitter(10L,"xu", "jiafei", "dale", "123456");

        //当调用保存方法时,返回指定的数据
        when(mockRepository.save(unsaved)).thenReturn(saved);

        SpitterController spitterController = new SpitterController(mockRepository);

        MockMvc mockMvc = standaloneSetup(spitterController).build();

        mockMvc.perform(post("/spitter/register")
                .param("firstName","xu")
                .param("lastName","jiafei")
                .param("username","dale")
                .param("password","123456"))
                .andExpect(redirectedUrl("/spitter/dale"));

        //此处若不重写Spitter的Equals方法和hashCode方法时将会报错,说两次的参数传递不一样
        verify(mockRepository,atLeastOnce()).save(unsaved);
    }
  1. 如果在没有重写实体类Spitter的Equals方法和hashCode方法时, verify(mockRepository,atLeastOnce()).save(unsaved)方法会报错:
代码语言:javascript
复制
Argument(s) are different! Wanted:
spitterRepository.save(
    Spitter{id=null, firstName='xu', lastName='jiafei', username='dale', password='123456'}
);
-> at test.SpitterControllerTest.shouldProcessRegistration(SpitterControllerTest.java:57)
Actual invocation has different arguments:
spitterRepository.save(
    Spitter{id=null, firstName='xu', lastName='jiafei', username='dale', password='123456'}
);
-> at com.spittr.controller.SpitterController.processRegister(SpitterController.java:51)
结论:其实该验证方法的两次参数内容是一样的,之所以会报错是因为方法在比较时是使用的Equals方法和hashCode方法,而如果没重写这两个方法则使用的是Object的方法(判断是否为同一个对象)。如果要正确验证,需要重写这两个方法
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结论:其实该验证方法的两次参数内容是一样的,之所以会报错是因为方法在比较时是使用的Equals方法和hashCode方法,而如果没重写这两个方法则使用的是Object的方法(判断是否为同一个对象)。如果要正确验证,需要重写这两个方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com