应该是代码中没有定义义assertEquals方法,Assert.assertEquals加这个来访问它
引用 皆我百晓生 小程序回复内容作答:
当使用JUnit的assertEquals
方法进行断言时,如果报错但结果并没有不同,可能有以下几个原因:
数据类型不同:assertEquals
方法在比较两个对象是否相等时,会检查它们的类型是否一致。如果两个对象的类型不同,即使它们的值相等,也会触发断言错误。请确保您在断言之前对要比较的对象进行类型检查或类型转换。
自定义对象的equals
方法:如果您在自定义的类中没有正确实现equals
方法,assertEquals
方法可能无法正确比较对象。请确保您在自定义类中正确重写了equals
方法,以便在比较对象时能够按预期执行。
引用对象:如果您在比较对象时使用了引用对象,即使两个对象的值相等,它们的引用可能是不同的。在这种情况下,assertEquals
会根据引用地址进行比较,并触发断言错误。您可以尝试使用assertSame
方法来比较引用对象,或使用相应的equals
方法来比较值。
浮点数比较:当涉及到浮点数比较时,可以使用assertEquals
的重载方法,设置一个允许的误差范围,即assertEquals(expected, actual, delta)
。这样可以避免由于浮点数精度导致的微小差异。
可能是其他测试代码造成的问题:检查测试代码中是否有其他可能影响断言结果的因素。例如,是否在测试中修改了要比较的对象,或者在测试中使用了其他与对象相关的方法,导致结果与预期不符。
尽管代码可能没有问题,但以上原因可能导致断言出现错误。通过检查以上问题,您可以确定问题所在并进行适当的调整,以确保断言结果与预期一致。
【相关推荐】
这里我们写一个自定义类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()方法,自然断言就不能通过了。