2015-12-04 1 views
1

У меня есть тест junit, где я хотел бы использовать аннотацию для методов определения параметров теста.Получить значение аннотации пользовательского метода из теста junit

У меня есть класс супер класса, где я абстрагировал некоторую обработку и где я хотел бы прочитать значения аннотации метода.

Я видел примеры аннотаций метода чтения, перейдя по классу. Я не уверен, что это сработает для того, что мне нужно. Как узнать, какой метод был вызван, и затем прочитать те конкретные значения аннотации (TrialMethod.name)?

public class MyUTest extends Processor{ 

    @Test 
    @TrialMethod(name = "methodToBeTested") 
    public void testMethod() throws Exception { 
     //assert stuff 
    } 

} 


public class Processor extends TestCase{ 

    private TrialMethodModel trialMethodModel = new TrialMethodModel(); 

    private void setMethodNameByAnnotation() { 
     Class<?> clazz = this.getClass(); 
     Class<TrialMethod> trialMethodClass = TrialMethod.class; 

     for (Method method : clazz.getDeclaredMethods()){ 

      if (method.isAnnotationPresent(trialMethodClass)){ 
       trialMethodModel.setName(method.getAnnotation(trialMethodClass).name()); 
      } 
     } 
    } 
} 

@Documented 
@Target(ElementType.METHOD) 
@Retention(value=RetentionPolicy.RUNTIME) 
public @interface TrialMethod { 

    String name(); 

} 
+0

TestWatcher кажется многообещающим. Я пытаюсь интегрировать это. http://blog.jiffle.net/post/41125006846/extending-junit-functionality-with-additional – Jim

ответ

0

Я узнал, что вы можете получить доступ к методу junit через класс junit. Тогда получение значения аннотации тривиально.

private void setTrialMethodByAnnotation() { 

    Class<?> clazz = this.getClass(); 
    Class<TrialMethod> trialMethod = TrialMethod.class; 

    Method method = null; 
    try { 
     method = clazz.getMethod(this.getName(),null); 
    } catch (SecurityException e) { 
     logger.error(e.getMessage()); 
    } catch (NoSuchMethodException e) { 
     logger.error(e.getMessage()); 
    } 

    if(method.isAnnotationPresent(trialMethod)){ 
     trialMethodModel.setName(method.getAnnotation(trialMethod).name()); 
     ... 
    } 
} 
Смежные вопросы