首先,我是Java的新手,所以希望这不是一件非常简单的事情,但我正在尝试进行一些单元测试,而不是在Eclipse中获得旧的绿灯。对我的问题:
所以,我有两个对象,都是Fraction类,我只是想确保我的方法(multiplyThem)是....呃...正常运行。
代码(编辑以显示我现在拥有的内容):
private Fraction newFraction, otherFraction, thirdFraction;
@Before
public void setUp(){
newFraction = new Fraction(2, 3);
otherFraction = new Fraction(1, 5);
thirdFraction = new Fraction(2, 15);
}
@Test
public void testMultiplyEm() {
System.out.println(newFraction.multiplyEm(otherFraction));
System.out.println(thirdFraction);
assertEquals("Fractions don't equal", newFraction.multiplyEm(otherFraction), thirdFraction);
}
在方法multiplyEm
中,返回类型是一个Fraction,它在调用另一个名为simplify的函数之前将两个分子和两个分母相乘。然后它返回简化的分数。
我在两个人身上分别使用了System.out.println
,并将完全相同的内容打印到屏幕上。我知道并不总是意味着它们是相同的,但也许Objects.equals
不是我应该在这里使用的。对象只有两个整数:Fraction x = new Fraction(int y, int z)
。
我不确定为什么这次测试失败了。有人有主意吗?非常感谢能够为它正确编写单元测试的方法!
分数类方法multiplyEm:
public Fraction multiplyEm(Fraction otherFraction){
int newNumerator = this.numerator * otherFraction.numerator;
int newDenominator = this.denominator * otherFraction.denominator;
Fraction newFraction = new Fraction(newNumerator, newDenominator);
return newFraction;
}
答案 0 :(得分:3)
你正在遇到对象身份和平等之间的区别。 equals方法根据实现检查身份或相等性。 ==
运算符始终检查对象的标识。
Objects.equals方法检查空引用,然后将检查委托给第一个参数的equals方法。
从Object类继承的equals方法检查对象的标识。对象引用是相同的。 Fraction
类应该覆盖equals实现。有一些rules用于正确实现equals方法。有一个equals和hashCode方法的契约,需要遵守Java Collections才能正常工作。
JUnit框架中包含assertEquals方法。这是通常用于在单元测试中测试相等性的方法。