gpt4 book ai didi

java - 初学者 ADT 和 JUnit 4

转载 作者:太空宇宙 更新时间:2023-11-04 14:10:42 24 4
gpt4 key购买 nike

我正在制作一个简单的 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 上找到一些教程视频,看看是否能找到解决方案。任何帮助将不胜感激!

最佳答案

您尚未覆盖 TestADT 中的 equalshashcode。默认情况下,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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com