我正在制作一个简单的ADT,它具有一个将3加到给定int的方法(Add3)。代码如下所示:

public class TestADT
{
    private final int x;

    public TestADT (int x)
    {
        this.x = x;
    }

    public static TestADT Add3(TestADT num)
    {
        int ex = (num.x + 3);
        return (new TestADT(ex));
    }

    public String toString()
    {
        return(x + "");
    }

    public static void main(String[] args)
    {
        TestADT test = new TestADT(2);
        System.out.println(Add3(test));
    }
}


我正在尝试做的是创建一个JUnit测试,以检查Add3方法是否正常工作,到目前为止,我已经做到了:

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class Add3Test
{
    private TestADT test;
    private TestADT expected;

    @Before
    public void setUp() throws Exception
    {
        test = new TestADT(2);
        expected = new TestADT(5);
    }

    @Test
    public void test()
    {
        TestADT result = TestADT.Add3(test);
        assertEquals(expected, result);
    }
}


当我运行测试类时,它会失败,但是我不确定为什么。如果在运行测试之前我同时打印了两个值(期望值和结果),则它们都将打印5。

我对JUnit和ADT相对较新,所以我不确定我是否在行使这项权利。我将尝试在JUnit上找到一些教程视频,看看是否能找到解决方案。任何帮助,将不胜感激!

最佳答案

您尚未在equals中覆盖hashcodeTestADT。默认情况下,equals是通过引用完成的。这意味着它将检查第一个实例是否与第二个实例相同。

您需要覆盖equalshashcode并让它们按x进行比较以检查是否相等:

public class TestADT
{
    private final int x;

    public TestADT(int x)
    {
        this.x = x;
    }

    public static TestADT Add3(TestADT num)
    {
        int ex = (num.x + 3);
        return (new TestADT(ex));
    }

    public String toString()
    {
        return(x + "");
    }

    public static void main(String[] args)
    {
        TestADT test = new TestADT(2);
        System.out.println(Add3(test));
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        TestADT testADT = (TestADT) o;

        if (x != testADT.x) return false;

        return true;
    }

    @Override
    public int hashCode() {
        return x;
    }
}


我认为,这是一个比@azbarcea更好的解决方案。如果要将TestADT放入SetMap并期望其正常工作,则需要实现这些方法。

关于java - 初学者ADT和JUnit 4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28356408/

10-09 05:33
查看更多