首页 > 解决方案 > +-*/ 有理数上的 Junit.framework.AssertionFailedError,但预期值和结果相同

问题描述

我已将代码编写到 + - * /rationals 并尝试使用 JUnit 对其进行测试,但出现错误,但预期值和结果值是相同的。有没有办法解决这个错误。

代码

public ImmutableRational Sub(ImmutableRational rValue)
{
    int resultDenom = LCM(this.denominator,rValue.denominator);
    int resultNum = (this.numerator * (resultDenom / this.denominator)) - (rValue.numerator *(resultDenom/ rValue.denominator));
    ImmutableRational result = new ImmutableRational(resultNum,resultDenom);
    return result;

}

测试

@Test
    public void testSub_ImmutableRational() {
        System.out.println("Sub");
        ImmutableRational rValue = new ImmutableRational(2,3);
        ImmutableRational instance = new ImmutableRational(3,4);
        ImmutableRational expResult = new ImmutableRational(1,12);
        ImmutableRational result = instance.Sub(rValue);
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        //fail("The test case is a prototype.");
    }

错误

Testcase: testSub_ImmutableRational(javarational.ImmutableRationalTest):    FAILED
expected: javarational.ImmutableRational<1/12> but was: javarational.ImmutableRational<1/12>
junit.framework.AssertionFailedError: expected: javarational.ImmutableRational<1/12> but was: javarational.ImmutableRational<1/12>
    at javarational.ImmutableRationalTest.testSub_ImmutableRational(ImmutableRationalTest.java:110)

标签: javajunit

解决方案


assertEquals 通过执行 equals 方法检查两个对象是否相同。您是否覆盖了 ImmutableRational 类中的 equals 方法?如果不是,那么它只检查它是否是同一个对象,因此这是预期的行为,因为它们不是同一个对象,即使它们具有相同的值。


推荐阅读