JUnit тестирование java Equal method

#java #junit #junit4

#java #junit #junit4

Вопрос:

Я написал этот код, но я все еще новичок в JUnit и понятия не имею о тестировании метода equal и equal2. Ниже приведен код, который я написал. Моя цель в этом коде — проверить, равно ли fname lname, используя метод equal, и с помощью equal2 проверить, совпадает ли fname с fname (it self), возможно, в моем коде тоже есть ошибки.

 public class EqualMethods {

    /**
     * @param args
     */

    private String fname;
    private String lname;

    public EqualMethods(String fl)
    {
        fname = fl;

    }

    public EqualMethods(String f, String l)
    {
        fname = f;
        lname = l;
    }


    public String getFname() {
        return fname;
    }

    public String getLname()
    {
        return lname;
    }

    public void setLname(String lname)
    {
        this.lname = lname;
    }



    public void setFname(String fname) {
        this.fname = fname;
    }


    public int equal(EqualMethods name)
    {
        if(fname == name.getFname() amp;amp; lname == name.getLname())
        {

            return 1;
        }
        else
        {
            return 0;
        }
    }

    public int equal2(Object o)
    {
        if(o.getClass() == EqualMethods.class )
        {
            EqualMethods e = (EqualMethods) o;
            if(this.fname.equals(e.fname))
            {
                return 1;
            }

            return 0;
        }
        return 0;
    }
    public String toString()
    {
        return (" My first name is: " fname   "  Last name is:  "   lname);
    }  

Цель состоит в том, чтобы создать тестовый пример Junit для equal и equal2, поскольку созданный мной тестовый пример не обеспечивает надлежащего вывода.Вот тестовый пример JUnit, который я написал, но я не могу сделать свой метод статичным, хотя как это обойти?

 public class EqualMethodsTest extends TestCase{

    @Test
    public void testEqual2() {
        String name = "goma";
        int ret = 1;
        int ans ;

        ans= EqualMethods.equal2(name);

        assertEquals(ret,ans);

    }

}  

Комментарии:

1. В чем ваш вопрос? Если это запрос на проверку кода, лучшим форумом было бы codereview.stackexchange.com . Вероятно, вам также следует объяснить, что вы требуете / ожидаете, что ваш код действительно будет выполнять.

2. Цель состоит в том, чтобы создать тестовый пример Junit для equal и equal2, поскольку созданный мной тестовый пример не обеспечивает надлежащего вывода.

3. Я имел в виду, что должен делать ваш EqualMethods класс. Мне это тоже кажется довольно странным, и если вы не понимаете, что должен делать код, то для него трудно писать тесты. Тесты полезны только в том случае, если они тестируются на соответствие какой-либо спецификации.

4. Эта статья, хотя и устаревшая, но содержит хороший пример testEquals() : Зараженный тест JUnit: программисты любят писать тесты

Ответ №1:

Вам нужно создать экземпляры EQUALMETHOD, чтобы сравнить их. Вот так:

 public class EqualMethodsTest extends TestCase{
    @Test
    public void testEqual2() {
        assertEquals(1, new EqualMethods("goma").equal(new EqualMethods("goma")));
    }
}
  

Редактировать:
Несколько комментариев о коде:

  1. Если вы работаете с актуальной версией junit, вам не нужно расширять TestCase, и имя тестового метода не обязательно должно начинаться с «test».
  2. Присвоение имени методу «equal» или «equal2» может быть не лучшей идеей … в Object, корне всех других объектов, уже есть метод с именем «equals» … может сбивать с толку.
  3. Скорее всего, fname == name.getFname() это не то, чего вы хотите достичь. При этом сравниваются ссылки на две строки, а не содержимое. Строки являются объектами и должны сравниваться следующим образом string1.equals(string2) .

Комментарии:

1. @Aene- Спасибо за это. Это, конечно, хорошая идея, я начал использовать Junit сегодня, поэтому я ценю ваш совет. Спасибо

Ответ №2:

Вероятно, это лучший способ сделать это:

 private EqualsMethods a;
private EqualsMethods b;

@Before
public void before {
    a = EqualsMethods("a);
    b = EqualsMethods("b);
}

@Test
public void equalTest() {

    assertTrue(a.equal(b));
}

@Test
public void equal2Test() {

    assertTrue(a.equal2(b));
}
  

Я все еще думаю, что то, что вы делаете, немного странно, хотя, вероятно, у вас должно быть два класса с одинаковыми атрибутами и методами — каждый с методом equals. Затем вы должны создать тесты для обоих этих классов. Не уверен, чего вы пытаетесь достичь здесь.