Как собрать все классы, реализующие интерфейс во время выполнения? - PullRequest
2 голосов
/ 06 февраля 2010

Для автоматического запуска всех моих тестовых классов я ищу все файлы классов в выделенном каталоге, преобразую путь в имя пакета и проверяю, реализует ли этот класс данный интерфейс:

try {
    Class<? > myTestClass = Class.forName( constructedClassName );
    if( myTestClass.isInstance( MyTestInterface.class ) ) {
        testCollection.add( myTestClass );
    }
}
catch( Error e ) {
    // ignore, no valid test class
}

Сегодня я столкнулся с ужасной ошибкой ( см. Этот вопрос ), используя эту технику.

Вопрос:

Как я могу собрать все свои тестовые классы, не игнорируя ошибки, которые могут возникнуть с классами, которые меня не интересуют?

Ответы [ 2 ]

1 голос
/ 06 февраля 2010

Что хорошего в классе, который не загружается? Почему бы просто не исправить их в первую очередь? Разве вы не должны их исправить в какой-то момент?

1 голос
/ 06 февраля 2010

Как я могу собрать все свои тестовые классы, не игнорируя ошибки, которые могут возникнуть с классами, которые меня не интересуют?

Вы вроде как загнали себя в угол здесь ...

Что бы я сделал, это одно (или более) из следующего:

  • исправьте нарушающие классы так, чтобы они do load

  • помещайте классы в разные каталоги, создавайте списки имен или используйте сопоставление с образцом, чтобы различать классы, которые вы / не хотите добавлять в testCollection

И регистрируйте ошибки конечно !! Возможно, зарегистрируйте их в другом месте, но если вы сделаете это, оставьте в основном журнале сообщение loud , которое сообщит кому-нибудь, где искать детали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...