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

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

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

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

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

55
задан Joey 2 June 2014 в 14:24
поделиться

4 ответа

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

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

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

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

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

68
ответ дан 7 November 2019 в 07:20
поделиться

Мне очень нравится соглашение 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 и оставляете предложенный пакет как есть.

(Одним из преимуществ пребывания в одном и том же пакете является доступ к защищенным членам и членам с областью действия пакета, хотя это не является «правильным» поведением модульного теста)


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

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

}
21
ответ дан 7 November 2019 в 07:20
поделиться

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

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

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

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

4
ответ дан 7 November 2019 в 07:20
поделиться

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

/src/main/java   (for codes)

/src/test/java   (for tests)
5
ответ дан 7 November 2019 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: