当前位置: 首页 > 知识库问答 >
问题:

当特定对象特定字段的实例传递时,如何存根方法?

仲孙鸣
2023-03-14

当调用Person class by [name = "Mohammad ",age = 26]的实例时,我想返回4。当调用Person class by [name = "Ali ",age = 20]的实例时,我想返回5。

所以我有这些课程:

public class Person {
    private String name;
    private int age;

我的刀类:

public class DAO {
    public int getA(Person person) {
        return 1;
    }

    public int getB(Person person) {
        return 2;
    }
}

这是计算器类

   public class Calculator {
        private DAO dao;

        public int add() {
            dao = new DAO();
            return dao.getA(new Person("Mohammad", 26)) +
                    dao.getB(new Person("Ali", 20));
        }
    }

这是我的测试:

    @Test
    public void testAdd() throws Exception {

        when(mydao.getA(new Person("Mohammad", 26))).thenReturn(4);
        when(mydao.getB(new Person("Ali", 20))).thenReturn(5);
        whenNew(DAO.class).withNoArguments().thenReturn(mydao);

        assertEquals(9, cal.add());
    }

那么为什么我的测试会失败呢?

共有2个答案

丁鸿云
2023-03-14

我不太确定您使用的是哪种测试框架,但when()调用中使用的Person实例与Calculator类中使用的实例不同,因此除非您在Person中重写equals()和hashcode(),否则它们不会被视为匹配。

您的IDE应该能够生成合适的默认equals()和hashcode()方法。

翟英达
2023-03-14

您的测试类中的Calculator类和new Person(“Mohammad”,26)new Person不相等,因为您没有覆盖 类中的方法。

覆盖< code>Person类中的equals方法,如下所示

 @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (age != person.age) return false;
        if (name != null ? !name.equals(person.name) : person.name != null) return false;

        return true;
    }

当覆盖< code>equals()方法时,覆盖< code>hashCode是必要的

 类似资料:
  • 假设我有一段代码,可以创建一个具有给定名称的苹果实例 这条线可以被许多玩家调用,每个玩家都有一个Apple类的实例,在这个实例中,名称有点像ID 现在假设在Apple类中有一个ArrayList,它存储每个玩家的朋友 还有一个getter/setter用于更新和检索朋友,所以如果一个特定的玩家键入一个命令 /addfriend将一个朋友添加到他的特定实例数组列表中,我将如何做到这一点? 示例,更新

  • 假设我让玩家创建团队并创建团队调用团队类的新实例,该实例具有称为成员的数组列表。 现在在主课堂上,我如何在被邀请后将球员添加到团队中?我在team类中有一个addPlayer方法,只需将它们添加到arraylist中,但是如果teams类当前有多个实例(其他玩家创建了团队),它怎么知道要加入哪一个呢? 我在teamLeader的Teams类中有一个变量,在创建实例时设置该变量,如果这可以帮助我编辑

  • 我工作在一个电子邮件偏好中心和用户有4个选项-3个选项是电子邮件频率和最后一个选项是退订。我有两个不同的字段,我的表单正在传递-电子邮件频率和电子邮件状态。我的电子邮件状态字段有问题。 对于单选按钮1-3,我希望它张贴电子邮件状态=“我”,而且电子邮件频率是“所有”,“每周”或“每月” 对于最后一个单选按钮,我只希望它发布电子邮件状态=“O” 我似乎不能使这两个工作-它要么只通过我,然后不明嫌犯单

  • 我们如何在数组中创建object的特定字段? 下面是函数内部的代码(问题) 谢谢!!

  • 我有一个有4个参数的类。还有一个测试,将空对象放入。有可能捕捉到这个空值吗?我的意思是,有些测试将IlligalArgumentException放在了一起。所以,如果我尝试用try-catch块捕捉这个空对象,对于整个costructor块,这个可以工作,但其他测试会崩溃,反之亦然。

  • 假设有一个类: ...您有一个实例列表,即