java初学者ADT和JUnit 4
我正在制作一个简单的ADT,它有一个方法(Add3),将3添加到给定的int中。代码如下所示:
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的教程视频,看看是否能找到解决方案。任何帮助都将不胜感激
# 1 楼答案
您尚未在
TestADT
中重写equals
和hashcode
。默认情况下,equals
是通过引用完成的。这意味着它正在检查第一个实例是否与第二个实例相同您需要重写
equals
和hashcode
,并让它们按x
进行比较以检查是否相等:在我看来,这是一个比@azbarcea好得多的解决方案。如果您想将
TestADT
放入Set
或Map
并期望它正常工作,则需要实现这些方法# 2 楼答案
修复代码的最快方法是使用:
最佳实践是对方法名使用小写:http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html