Тестирование Eclipse junit в том же проекте


это относительно открытый вопрос. Если я создал приложение в проекте в Eclipse, а затем хочу протестировать этот проект, должен ли я создать код JUnit в том же проекте или создать отдельный проект. Например...

ShopSystem может быть, имя моего основного проекта-я должен создать проект под названием say,ShopSystemTest?

В общем - как далеко" далеко " должен храниться тестовый код из основной папки проекта? Если я храню тестовый код внутри основной проект, а затем экспортировать основной проект в виде выполняемой jar он будет принимать тестовый код с ним, что не идеально...

предложения?

4 52

4 ответа:

Хотя нет единственно правильного пути, обычный подход заключается в том, чтобы держать модульные тесты в одном проекте.

вы можете создать вторую исходную папку (например test), где вы помещаете свои тестовые классы в те же пакеты, что и тестируемые классы. Это также позволяет тестировать частные классы пакетов, не заполняя основные исходные пакеты тестовыми классами.

ваша исходная папка / структура пакета будет выглядеть следующим образом:

-sources
   -main
       -my.package
             -MyClass.java
   -test
       -my.package
             -MyClassTest.java

затем вы можете настройте свою сборку, чтобы не включать test исходная папка при упаковке банки.

мне очень нравится соглашение maven: в одном проекте есть отдельное исходное дерево для main и test, основной код развертывается, тестовый код нет. структуры пакетов могут быть (но не обязательно) идентичными.

project
    src
        main
             java      // source files
             resources // xml, properties etc
        test
             java      // source files
             resources // xml, properties etc

и в затмении, когда вы выбираете new -> JUnit test case, вы просто измените исходную папку на src / test / java и оставьте предлагаемый пакет как есть.

(одним из преимуществ пребывания в одном пакете является доступ к защищенному и пакетному объему члены, хотя это не "правильное" поведение модульного теста)


обновление: вот код, чтобы проиллюстрировать мой последний пункт:

основной класс (в src / main / java):

package com.test;
public class Foo{

    static class Phleem{
        public Phleem(final String stupidParameter){
        }
    }

    String bar;
    protected String baz;
    protected Object thingy;

}

тестовый класс (в src / test / java):

package com.test;
import org.junit.Test;

public class FooTest{

    @Test
    public void testFoo(){
        final Foo foo = new Foo();
        foo.bar = "I can access default-scoped members";
        foo.baz = "And protected members, too";
        foo.thingy = new Foo.Phleem("And I can access default-scoped classes");
    }

}

обычно у вас есть -

/src/main/java   (for codes)

/src/test/java   (for tests)

рассмотрим способ maven : в проекте maven сорусы организованы таким образом

src
 |--main
 |     |--java
 |--test
       |--java

ваш исходный код идет в src/main/java, ваш тестовый код junit идет в src/test / java, они оба являются исходной папкой (и, как следствие, вы можете поместить свой код jUnit в тот же пакет, что и ваш код Java, но в другую исходную папку).

интерес заключается в том, что для обычного кодирования ваши классы jUnit находятся в пакетах кода, но при создании jar вы можете принимать классы только из src / main / java и не выпускайте свои тесты.