Тестирование Junit Eclipse в том же проекте
Это относительно открытый вопрос. Если я создал приложение в проекте в Eclipse, а затем хочу протестировать этот проект, должен ли я создать код JUnit в том же проекте или создать отдельный проект. Например...
ShopSystem
возможно, имя моего основного проекта - должен ли я создать проект с именем say, ShopSystemTest
?
В целом - как далеко "прочь" должен быть сохранен тестовый код из основной папки проекта? Если я сохраню тестовый код в основном проекте, а затем экспортирую основной проект в качестве исполняемого банку, он возьмет с собой тестовый код, который не идеален...
Предложения?
Ответы
Ответ 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, и не выпускать тесты.