Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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


Обновление: Здесь приведен код, иллюстрирующий мой последний пункт:

Основной класс (в 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");
    }

}

Ответ 3

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

/src/main/java   (for codes)

/src/test/java   (for tests)

Ответ 4

Рассмотрим путь maven: в проекте maven, таким образом, организованы сокрушения.

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

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

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