java测试assertEquals报错

img

img

img


测试的时候报错,但是结果并没有不同,到底是为什么,点进去查看不同但是并没有不同。代码也没有问题。
补充:import导入的包是全的,只是我没有截上,代码中的方法都是可以用的。

应该是代码中没有定义义assertEquals方法,Assert.assertEquals加这个来访问它

引用 皆我百晓生 小程序回复内容作答:
当使用JUnit的assertEquals方法进行断言时,如果报错但结果并没有不同,可能有以下几个原因:

  1. 数据类型不同:assertEquals方法在比较两个对象是否相等时,会检查它们的类型是否一致。如果两个对象的类型不同,即使它们的值相等,也会触发断言错误。请确保您在断言之前对要比较的对象进行类型检查或类型转换。

  2. 自定义对象的equals方法:如果您在自定义的类中没有正确实现equals方法,assertEquals方法可能无法正确比较对象。请确保您在自定义类中正确重写了equals方法,以便在比较对象时能够按预期执行。

  3. 引用对象:如果您在比较对象时使用了引用对象,即使两个对象的值相等,它们的引用可能是不同的。在这种情况下,assertEquals会根据引用地址进行比较,并触发断言错误。您可以尝试使用assertSame方法来比较引用对象,或使用相应的equals方法来比较值。

  4. 浮点数比较:当涉及到浮点数比较时,可以使用assertEquals的重载方法,设置一个允许的误差范围,即assertEquals(expected, actual, delta)。这样可以避免由于浮点数精度导致的微小差异。

  5. 可能是其他测试代码造成的问题:检查测试代码中是否有其他可能影响断言结果的因素。例如,是否在测试中修改了要比较的对象,或者在测试中使用了其他与对象相关的方法,导致结果与预期不符。

尽管代码可能没有问题,但以上原因可能导致断言出现错误。通过检查以上问题,您可以确定问题所在并进行适当的调整,以确保断言结果与预期一致。

【相关推荐】



  • 这篇博客: 断言判断数组、对象、容器相等中的 2.1 assertEquals() 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    这里我们写一个自定义类Student以用作测试,

    public class Student {
    	public String name;
    	public Integer age;
    
    	public Student(String name, Integer age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    
    	@Override
    	public String toString() {
    		return "Student [name=" + name + ", age=" + age + "]";
    	}
        
        @Override
    	public boolean equals(Object obj) {
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    		Student other = (Student) obj;
    		if (age == null) {
    			if (other.age != null)
    				return false;
    		} else if (!age.equals(other.age))
    			return false;
    		if (name == null) {
    			if (other.name != null)
    				return false;
    		} else if (!name.equals(other.name))
    			return false;
    		return true;
    	}
    }
    

    Student类包含有name、age属性,有参构造方法、覆盖了Object父类的toString()方法和equals()方法。

    被测试类的方法如下:

    public class MyClass {
    	public static Student stuMethod() {
    		return new Student("Rhine", 1);
    	}
    }
    

    通过调用stuMethod()方法返回一个Student对象,以模拟我们的被测试方法。

    Junit测试代码如下:

    class TestMain {
    
    	@Test
    	void test() {
            //断言失败,只比较对象的引用是否相等
            //assertSame(new Student("Rhine",1), MyClass.stuMethod());
    		
            assertEquals(new Student("Rhine",1), MyClass.stuMethod());
    	}
    }
    

    根据1.2中源码的分析,我们重写了Student类的equals()方法(使用Eclipse自动生成的),这样assertEquals()方法就能够成功通过。
    在这里插入图片描述
    当我们注释掉equals()方法,自然断言就不能通过了。
    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^