Netbeans - исходные классы не имеют доступа к тестовым классам? - PullRequest
3 голосов
/ 21 августа 2009

У меня есть проект NetBeans с несколькими исходными классами и около 10 тестовых классов jUnit в отдельной папке Test .

Из тестовых файлов я могу импортировать любой другой тестовый файл или исходный класс. Однако из обычных исходных файлов NetBeans действует так, как будто классы Test не существуют. Автозаполнение для них не будет работать, и если я попытаюсь использовать их, я получаю ошибку компиляции.

Я понимаю, что обычно не имеет смысла использовать класс Test из обычного источника, но у меня есть веская причина в этом случае. Часть моей программы принимает имя класса в виде строки и создает его с отражением. Один из моих тестов jUnit вызывает этот метод для тестирования и передает ему имя класса Test. Это всегда терпит неудачу, потому что нормальный программный код не может найти ни один из классов из папки Test.

Ответы [ 3 ]

6 голосов
/ 21 августа 2009

Я не уверен, что это будет мнение большинства, но вот мое мнение: если ваша программа дает сбой, потому что вы не можете получить доступ к тестовым классам из исходных классов, вы делаете что-то не так. Мне все равно, если вы думаете, что у вас есть веская причина, у вас нет. (Ну я думаю, что нет.)

Возможно, вам нужно перенести тестовый класс в проект. Или, в вашем случае, вам может понадобиться настроить путь к классам для тестирования ... Я не могу однозначно сказать, как я бы порекомендовал решить ситуацию, не имея доступа к вашему коду. С точки зрения исходных классов, тестовые классы действительно не должны существовать, если проект не тестируется.

2 голосов
/ 21 августа 2009

Во время выполнения теста classpath будет включать исходный и тестовый классы. Они должны, и я не думаю, что было бы действительно возможно предотвратить доступ одного к другому во время выполнения, даже с загрузчиками классов. Я, безусловно, очень сомневаюсь, что Netbeans делает это, даже если это теоретически возможно.

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

Другая причина в том, что вы используете неправильный загрузчик классов для загрузки класса (то есть не просто с помощью Class.forName ()). Можете ли вы опубликовать фрагмент кода при загрузке класса?

0 голосов
/ 15 ноября 2012

Я столкнулся с очень похожей проблемой и в конечном итоге обнаружил, что фиктивные объекты, реализованные в папке «Тест», просто не компилировались, потому что я никогда не создавал их экземпляры напрямую. Другими словами, мой код потерпит неудачу:

Class gatewayClass = Class.forName(System.getProperty("com.ov.MockGateway"));

Даже при том, что test/com/ov/MockGateway.java настроен правильно. Поскольку я явно не создавал экземпляр MockGateway, NetBeans старательно пропустил его компиляцию. Если я скомпилировал файл вручную, выбрав его в представлении «Проекты» и нажав клавишу F9, тогда мой тест прошел нормально.

Мой обходной путь - добавить следующий код в мой модульный тест, заставив NetBeans скомпилировать класс фиктивного объекта:

public void doNothing() {
    // Force the compiler to build MockGateway.class
    // by including a do-nothing reference to it.
    MockGateway mock = new MockGateway();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...