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

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

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() && 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);

    }

}

person Splitter    schedule 21.05.2011    source источник
comment
Какой у Вас вопрос? Если это запрос на проверку кода, лучшим форумом будет codereview.stackexchange.com. Вероятно, вам также следует объяснить, что вы требуете / ожидаете от своего кода на самом деле.   -  person Stephen C    schedule 21.05.2011
comment
Цель состоит в том, чтобы создать тестовый пример Junit для equal и equal2, поскольку созданный мной тестовый пример не обеспечивает надлежащего вывода.   -  person Splitter    schedule 21.05.2011
comment
Я имел в виду, что должен делать ваш класс EqualMethods. Мне это тоже кажется довольно странным, и если вы не понимаете, что код должен делать, трудно писать для него тесты. Тесты полезны только в том случае, если они проверяют соответствие какой-либо спецификации.   -  person Stephen C    schedule 21.05.2011
comment
Эта статья хоть и устарела, но содержит хороший пример testEquals(): JUnit Test Infected: Программисты любят писать тесты   -  person informatik01    schedule 11.04.2013


Ответы (2)


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

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).
person Arne Deutsch    schedule 21.05.2011
comment
@Aene- Спасибо за это. Это хорошая идея, я начал заниматься Junit сегодня, поэтому я ценю ваш совет. спасибо - person Splitter; 21.05.2011

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

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. Затем вы должны создать тесты для обоих этих классов. Не уверен, чего вы пытаетесь достичь здесь.

person Jon    schedule 21.05.2011