Это относительно открытый вопрос. Если я создал приложение в проекте в Eclipse, а затем хочу протестировать этот проект, следует ли мне создать код JUnit в том же проекте или создать отдельный проект. Например ...
ShopSystem
, возможно, название моего основного проекта - следует ли мне создать проект под названием, скажем, ShopSystemTest
?
В целом - как далеко «далеко» должно проходить тестирование код хранить из основной папки проекта? Если я сохраню тестовый код в основном проекте, а затем экспортирую основной проект как исполняемый jar-файл, он возьмет с собой тестовый код, что не идеально ...
Предложения?
Хотя единственно правильного пути не существует, обычный подход заключается в том, чтобы хранить модульные тесты в одном проекте.
Вы можете создать вторую исходную папку (например, test
), в которую вы поместите свои тестовые классы в те же пакеты, что и тестируемые классы. Это также позволяет вам тестировать частные классы пакета, не перегружая ваши основные исходные пакеты тестовыми классами.
Ваша исходная папка/структура пакета будет выглядеть следующим образом:
-sources
-main
-my.package
-MyClass.java
-test
-my.package
-MyClassTest.java
Затем вы можете настроить свою сборку так, чтобы при упаковке JAR не включалась исходная папка test
.
Мне очень нравится соглашение 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");
}
}
Рассмотрите способ maven: в проекте maven источники организованы таким образом
src
|--main
| |--java
|--test
|--java
Ваш исходный код находится в src/main/java, ваш тестовый код junit находится в src/test/java, они оба являются исходными папками (и, как следствие, вы можете поместить свой код jUnit в тот же пакет, что и ваш код Java, но в другой исходной папке).
Интерес в том, что при обычном программировании ваши классы jUnit находятся в пакетах кода, но при создании jar вы можете брать классы только из src/main/java и не выпускать свои тесты.
Обычно у вас есть -
/src/main/java (for codes)
/src/test/java (for tests)