Я делаю простой 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 и посмотреть, смогу ли я найти решение. Любая помощь будет оценена!
Вы не переопределили equals
и hashcode
в вашем TestADT
. По умолчанию значения equals
по ссылке. Это означает, что он проверяет, является ли первый экземпляр второго экземпляра.
Вам нужно переопределить equals
и hashcode
и сравнить их по 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's. Вам нужно будет реализовать эти методы, если вы хотите поместить свой TestADT
в Set
или Map
и ожидать, что он будет работать правильно.
Как мне написать о тестовых случаях JUnit для простого Java-приложения? Я нашел это Java-приложение @https://www.includehelp.com/java-programs/java-program-to-add-two-distances-using-class.aspx Я начинающий в JUnit, но я пытаюсь научить себя основы. Помощь будет принята с благодарностью.
Самый быстрый способ исправить ваш код - использовать:
@Test
public void test()
{
TestADT result = TestADT.add3(test);
assertEquals(expected.toString(), result.toString());
}
Наилучшей практикой является использование нижнего регистра для имен методов: http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html