2012-03-04 4 views
0

Я борюсь с перестановкой heiracrchy в моем проекте. Я организовал все классы в пакеты (но неправильно), и теперь я думаю, что мне нужно вложить свои пакеты против того, чтобы они были на разных уровнях?JUnit test cases - Не вижу классов

Теперь, когда я пытаюсь написать тестовые классы для классов в моем проекте, я не вижу соответствующих методов, не используя рефлексию для всего.

иерархия у меня на данный момент enter image description here

Что мне нужно изменить, чтобы быть в состоянии проверить без использования отражения для всего и, чтобы иметь возможность правильно гнездо мои пакеты?

Благодаря

+0

Что вы подразумеваете под «см. Соответствующие методы» и «с использованием отражения»? Может быть, вы имеете в виду, что видимость ваших методов - это уровень пакета по умолчанию? Вы можете исправить это, сделав их общедоступными: 'public void testMyStuff()' –

+0

Когда я создаю объекты классов в своем тестовом классе, у них никогда не было доступных методов? – Biscuit128

+1

Можете ли вы показать нам минимальный пример класса и его теста, чтобы мы могли видеть, что вы на самом деле делаете? – DNA

ответ

2

по умолчанию доступность методов работы является «пакет видимость». Смотрите эту статью от IBM по этому вопросу:

http://www.ibm.com/developerworks/library/ws-tip-mem-visibility.html

Для того, чтобы ваши методы могут видеть классы вне пакета, сделать их достоянием общественности:

public void myMethod() {...} 
+0

Я понимаю это, это просто, что даже изменение их на общественность ничего не меняет, я не получаю никаких предложений по умолчанию для завершения кода. – Biscuit128

+0

Предоставляет ли компилятор доступ к ним (без завершения кода)? Возможно, вы должны очистить весь проект (проект меню -> чистый ...) –

+0

О, и любые внутренние классы, которые вы используете, должны быть обнародованы! И если все это не работает, я думаю, вы должны написать больше в вопросе о конкретной ситуации (конкретные классы, использующие/используемые, расположение пакетов и т. Д.), Возможно, это помогает найти ответ. –

3

организовать тестовые файлы, чтобы иметь такую ​​же структуру пакета, что и ваши файлы src. Таким образом, любой метод в co.uk.mine.SomeClass может иметь соответствующий co.uk.mine.SomeClassTest, который может получить доступ к любым неличным методам. Отражением могут пользоваться частные методы. Ваш идеал должен позволять вам установить 2 структуры фидера, чтобы сохранить код проверки отдельно:

../src/co/uk/mine/SomeClass.java 
../test/co/uk/mine/SomeClassTest.java 
+0

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

+0

Стоит добавить, что стандартом в мире Java является «Maven layout», где внутри корня проекта у вас есть каталог 'src', внутри которого есть' main' и 'test', внутри каждого из которых есть каталог 'java', который на самом деле является корнем источника. Нет никаких особых оснований придерживаться этого стандарта, но вы можете встретить его в дикой природе. –

+0

Согласитесь с maven layout (по моему предпочтению), но много людей, которых мы муравьи или другие соглашения, которые могут быть разными. Я предполагаю, что нужно использовать 2 структуры каталогов на пути к классу, которые позволяют зеркалировать пакеты, но отдельные папки. Опять же, я предпочитаю Maven и буду поощрять внешний вид, если вы никогда не использовали его. – Romski