Acceda a la anotación personalizada en un testrulo -- java campo con spring campo con junit campo con annotations camp Relacionados El problema

Access custom annotation in a TestRule


2
vote

problema

Español

Prefacio:

Tengo la siguiente anotación y la parte de inicialización de reglas de una prueba de JUnit. El objetivo es usar una configuración diferente y hacer que la prueba sea lo más fácil posible de usar.

  // Annotation @Retention(RetentionPolicy.RUNTIME) public @interface ConnectionParams {     public String username();     public String password() default ""; }  // Part of the test @ConnectionParams(username = "john") @Rule public ConnectionTestRule ctr1 = new ConnectionTestRule();  @ConnectionParams(username = "doe", password = "secret") @Rule public ConnectionTestRule ctr2 = new ConnectionTestRule();   

Ahora quiero acceder a los parámetros de anotación en el siguiente testrulo, pero no encuentra ninguna anotación.

  public class ConnectionTestRule implements TestRule {     public Statement apply(Statement arg0, Description arg1) {         if (this.getClass().isAnnotationPresent(ConnectionParams.class)) {             ... // do stuff         }     } }   

¿Cómo puedo acceder a la anotación dentro del testrule?

Original en ingles

Preface:

I have the following annotation and the rule initialization part of a junit test. The goal is, to use different configuration and making the test as easy as possible to use.

// Annotation @Retention(RetentionPolicy.RUNTIME) public @interface ConnectionParams {     public String username();     public String password() default ""; }  // Part of the test @ConnectionParams(username = "john") @Rule public ConnectionTestRule ctr1 = new ConnectionTestRule();  @ConnectionParams(username = "doe", password = "secret") @Rule public ConnectionTestRule ctr2 = new ConnectionTestRule(); 

Now i want to access the annotation parameters in the following TestRule, but it does not find any annotation.

public class ConnectionTestRule implements TestRule {     public Statement apply(Statement arg0, Description arg1) {         if (this.getClass().isAnnotationPresent(ConnectionParams.class)) {             ... // do stuff         }     } } 

How can i access the annotation within the TestRule?

           

Lista de respuestas

-1
 
vote

Su aplicación es incorrecta.

Aplique anotación personalizada en el nivel de clase y no en la forma en que lo ha hecho.

  =A3-A23  

Entonces su código debería funcionar,

  =A3-A24  

Editar: Después de la pregunta actualizada.

Debe obtener primero el campo usando la reflexión para que encuentre cada objeto de ConnectionTestrule que creó y obtenga su anotación para obtener su configuración requerida.

  =A3-A25  
 

Your application is incorrect.

Apply custom annotation on class level and not on the way you have done it.

// Apply on class instead @ConnectionParams(username = "john") public class ConnectionTestRule {.... 

Then your code should work,

public class ConnectionTestRule implements TestRule {     public Statement apply(Statement arg0, Description arg1) {       //get annotation from current (this) class       if (this.getClass().isAnnotationPresent(ConnectionParams.class)) {         ... // do stuff       }     } } 

EDIT : After updated question.

You need to get first the field using reflection so that you will find each ConnectionTestRule object you created and get from it your annotation to get your required configuration.

for(Field field : class_in_which_object_created.getDeclaredFields()){       Class type = field.getType();       String name = field.getName();       //it will get annotations from each of your        //public ConnectionTestRule ctr1 = new ConnectionTestRule();       //public ConnectionTestRule ctr2 = new ConnectionTestRule();       Annotation[] annotations = field.getDeclaredAnnotations();       /*        *        *once you get your @ConnectionParams then pass it respective tests        *        */ } 
 
 
         
         

Relacionados problema

1  ¿Puedes especializar las anotaciones de Java heredadas?  ( Can you specialize inherited java annotations ) 
Tengo una superclase abstracta que tiene anotaciones de JPA en él mapeando algunos de sus campos. La clase en sí tiene la anotación de @Mappapsuperclass. ¿P...

30  Cómo especificar un frijol como no perezoso con anotaciones  ( How to specify a bean as non lazy with annotations ) 
¿Alguien sabe cómo especificar un frijol como no Lazy al usar anotaciones para configurar el frijol? ...

0  El aditadestannotation puede no responder a initwithboordinin  ( Addressannotation may not respond to initwithcoordinate ) 
Mi programa funciona bien en iOS 4.0, sin embargo, Ejecutar en iOS 5.0 tiene la advertencia de la siguiente manera: "Es posible que la aditadestannotation n...

0  Struts2 anotación: validadores para caracteres inválidos  ( Struts2 annotation validators for invalid chars ) 
Mientras usa Struts2, estoy usando varias anotaciones para hacer mis validaciones dentro de la clase Modelo, en los métodos ?3 , como: @RequiredStringVali...

4  ¿Pueden las anotaciones de Java ayudarme con esto?  ( Can java annotations help me with this ) 
Me pregunto si hay una manera de especificar que un método se llama antes de un método de clase. Sé que algo así debería ser possible, ya que JUnit tiene ante...

3  Texto de Hightlight en múltiples líneas  ( Hightlight text on multiple line ) 
Intento usar jQuery para resaltar el texto. He seguido esta solución Fiddle: http://jsfiddle.net/thelinh/ups3v/ Es trabajo para buscar y resaltar text...

3  iPhone mkmapview anotaciones observadores seleccionables una vez  ( Iphone mkmapview annotations observers selectable once ) 
Tengo diferentes anotaciones de mapas personalizadas en mi mkmapview, y al crear la vista personalizada, agrego un observador y deshabilita la ventana emergen...

1  Estoy trabajando en los gráficos de barras de Google, estoy atrapado con agregar colores a las barras individuales  ( I am working on google bar charts i am stuck with adding colours to individual ) 
<provider android:name="com.google.android.gms.ads.MobileAdsInitProvider" android:authorities="${applicationId}.mobileadsinitprovider" android:ex...

3  Consistencia de los miembros del entorno de procesamiento a través de las rondas de compilación  ( Consistency of processing environment members across compilation rounds ) 
La API de procesamiento de anotación Java, ya que se encuentra en JDK 6 y 7 (no la API de la herramienta APT de 5) define el ciclo de vida de un procesador de...

18  Anotaciones en las interfaces?  ( Annotations on interfaces ) 
No puedo descubrir un caso de uso para poder anotar las interfaces en Java. ¡Tal vez alguien podría darme un ejemplo? ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos