2015-03-11 3 views
0

Итак, я пытаюсь проверить методы на определенном классе (со стандартным конструктором), а методы тестирования могут быть только public и типа void и должны начинаться с «теста».Построить объект типа, определенный во время выполнения?

public static void main(String[] args) throws ClassNotFoundException { 
    Class<?> c = null; 
    c = Class.forName(args[0]); 

    System.out.println(c.getName()); 
    for (Method m : c.getMethods()) { 
     if (m.getName().startsWith("test") 
       && m.getReturnType().equals(Void.TYPE) 
       && m.getModifiers() == Modifier.PUBLIC) { 

      Object o = null; 

      try { 
       o = c.newInstance(); 
      } catch (InstantiationException | IllegalAccessException ex) { 
       System.out.println(ex.getMessage()); 
      } 

      // ???  
     } 
    } 
} 

Итак, мои проверки работают, но я не знаю, как создать новый экземпляр класса и протестировать метод. Как мне это сделать?

+4

Что вы думаете 'c.newInstance();' делает? –

+0

Я хочу передать это классу, который я использую, и использовать метод 'm' из него. – Tetramputechture

+0

Итак, бросьте его или используйте отражение, чтобы вызвать метод ... – MadProgrammer

ответ

2

Try с:

m.invoke(o); 

Это рефлекторно вызывать ваш метод'm', учитывая, что не получает никаких аргументов.

Одна заметка о проверке, если метод public. Вы бы лучше выполнить, что регистрация так:

boolean isPublic = Modifier.isPublic(m.getModifiers()); 

Если вы не хотите, чтобы проверить, что метод только общественности и не имеет никакой другой модификатор, в этом случае ваш код ОК.

Обработка исключений остается в качестве excersice;)

Смежные вопросы