用于jUnit测试的Objects.equals

时间:2016-04-30 18:35:59

标签: java unit-testing junit

首先,我是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;
    }

1 个答案:

答案 0 :(得分:3)

你正在遇到对象身份和平等之间的区别。 equals方法根据实现检查身份或相等性。 ==运算符始终检查对象的标识。

Objects.equals方法检查空引用,然后将检查委​​托给第一个参数的equals方法。

从Object类继承的equals方法检查对象的标识。对象引用是相同的。 Fraction类应该覆盖equals实现。有一些rules用于正确实现equals方法。有一个equals和hashCode方法的契约,需要遵守Java Collections才能正常工作。

JUnit框架中包含assertEquals方法。这是通常用于在单元测试中测试相等性的方法。