Тестирование Eclipse junit в том же проекте
это относительно открытый вопрос. Если я создал приложение в проекте в Eclipse, а затем хочу протестировать этот проект, должен ли я создать код JUnit в том же проекте или создать отдельный проект. Например...
ShopSystem
может быть, имя моего основного проекта-я должен создать проект под названием say,ShopSystemTest
?
В общем - как далеко" далеко " должен храниться тестовый код из основной папки проекта? Если я храню тестовый код внутри основной проект, а затем экспортировать основной проект в виде выполняемой jar он будет принимать тестовый код с ним, что не идеально...
предложения?
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"); } }
рассмотрим способ maven : в проекте maven сорусы организованы таким образом
src |--main | |--java |--test |--java
ваш исходный код идет в src/main/java, ваш тестовый код junit идет в src/test / java, они оба являются исходной папкой (и, как следствие, вы можете поместить свой код jUnit в тот же пакет, что и ваш код Java, но в другую исходную папку).
интерес заключается в том, что для обычного кодирования ваши классы jUnit находятся в пакетах кода, но при создании jar вы можете принимать классы только из src / main / java и не выпускайте свои тесты.