Blog

Modificación de la visibilidad de métodos y clases para JUnit 5

December 21, 2020
Alan Richardson

Modificación de la visibilidad de métodos y clases para JUnit 5

Uno de los placeres de la programación es el aprendizaje constante necesario para mantenerse al día. Uno de los problemas es que desarrollamos familiaridad y patrones de uso que pueden afectar la adopción de nuevos enfoques. Sensei puede ayudar en la migración identificando patrones obsoletos y sugiriéndonos la solución a seguir.

Por ejemplo, cuando migré de JUnit 4 a JUnit 5, estaba acostumbrado a escribir todas mis clases y métodos de prueba como públicos. Pero con JUnit 5, pueden tener visibilidad de paquete.

p. ej., en lugar de:

public class Junit5VisibilityTest {
    @Test
    public void thisDoesNotNeedToBePublic(){
        Assertions.assertTrue(true);
    }
}


Realmente prefiero escribir:

class Junit5VisibilityTest {
    @Test
    void thisDoesNotNeedToBePublic(){
        Assertions.assertTrue(true);
    }
}


Me tomó un tiempo desarrollar la memoria muscular para programar así, y todavía me equivoco de vez en cuando.

Uso de Sensei

Con Sensei puedo crear recetas que encuentren los métodos y clases públicos, y modificar las declaraciones para que tengan visibilidad de paquete automáticamente.

Para lograr esto, creé una receta:

Nombre - JUnit: Los métodos de prueba de JUnit 5 no necesitan ser públicos
Descripción - Los métodos de prueba de JUnit 5 no necesitan visibilidad pública
Nivel - Error


Lo clasifiqué como Error porque quiero erradicar esta práctica de codificación y deseo una mayor visibilidad del problema mientras escribo código en el IDE.

Modificación de la declaración de clase

Para encontrar las clases, busco cualquier clase que tenga una anotación secundaria @Test de JUnit 5, es decir, org.junit.jupiter.api.Test

Y donde la clase tenga el modificador public:

buscar:
  clase:
    con:
      hijo:
        anotación:
          tipo: "org.junit.jupiter.api.Test"
    modificador: "public"

Entonces, la corrección rápida cambia el modificador para eliminar la visibilidad y dejarla por defecto, lo cual equivale a visibilidad de paquete, que es lo que busco.

correccionesDisponibles:
- nombre: "eliminar visibilidad public de la clase de prueba JUnit 5"
  acciones:
  - cambiarModificadores:
      visibilidad: ""



Modificación de las declaraciones de métodos

La receta para modificar la declaración de métodos es muy similar a la de la clase.

Primero, busco los métodos públicos anotados con @Test de JUnit 5.

buscar:
  método:
    anotación:
      tipo: "org.junit.jupiter.api.Test"
    modificador: "public"


Y luego cambio el modificador a visibilidad por defecto.

correccionesDisponibles:
- nombre: "Eliminar visibilidad public del método @Test"
  acciones:
  - cambiarModificadores:
      visibilidad: ""


Consejo: Modificar múltiples métodos

Sensei tiene la capacidad de aplicar la corrección rápida a todas las infracciones en el archivo actual.

Cuando uso alt+enter para aplicar la corrección rápida.

Si despliego el menú con el nombre de la corrección rápida, puedo ver una opción para:

"Corregir todo: problemas de 'JUnit: los métodos de prueba de JUnit 5 no necesitan ser públicos' en el archivo"

Al seleccionar esa opción, Sensei modificará todas las apariciones del problema, no solo la que seleccioné.


Remove Test Method Public Visibility

Modificación de la clase

Del mismo modo que un método no necesita ser público, tampoco lo necesita la clase.

Puedo crear una receta y una corrección rápida para modificar la clase.

Nombre - JUnit: Las clases de prueba de JUnit 5 no necesitan ser públicas
Descripción - Las clases de prueba de JUnit 5 no necesitan ser públicas
Nivel - Error


Cuando encuentro una clase que es pública y tiene un método con una anotación @Test, quiero cambiar su visibilidad.

buscar:
  clase:
    modificador: "public"
    anyOf:
    - hijo:
        método:
          anotación:
            tipo: "Test"


Puedo realizar el cambio en la definición de la clase nuevamente con la acción changeModifiers.

correccionesDisponibles:
- nombre: "Eliminar visibilidad pública de la clase @Test"
  acciones:  
- changeModifiers:
      visibilidad: ""


Resumen

Una herramienta de análisis estático me alertó inicialmente sobre este enfoque recomendado en JUnit. Sin embargo, la herramienta no me ayudó a desarrollar la memoria muscular necesaria para cambiar mi código mientras programo.

Utiliza el 'Nivel' para recibir alertas. Cuando se trata de un problema que intento erradicar de mi código, inicialmente lo marco como 'Error' y luego reduzco la severidad a medida que me acostumbro a la nueva forma de programar.

Recuerda que puedes usar Sensei para solucionar todos los problemas del archivo actual al mismo tiempo, utilizando la opción del menú desplegable al aplicar el QuickFix.

Al crear una receta en Sensei, puedo ver mi antiguo enfoque de codificación en tiempo real. Y usar QuickFix para reforzar el nuevo enfoque si ocasionalmente cometo un error al programar.

---

Puedes instalar Sensei desde IntelliJ usando "Preferences \ Plugins" (Mac) o "Settings \ Plugins" (Windows) y simplemente buscar "sensei secure code".

El código fuente y las recetas para esto se encuentran en el repositorio `sensei-blog-examples` en la cuenta de GitHub de Secure Code Warrior, dentro del módulo `junitexamples`.



Eslogan

Controle el desarrollo impulsado por IA antes de su lanzamiento

Mida el riesgo asistido por IA, aplique políticas de codificación segura en el momento de la confirmación y acelere la entrega segura en todo su ciclo de vida de desarrollo de software (SDLC).

Reservar una demostración
Biblioteca de recursos

Explorar más blogs

Acceda a contenido especializado sobre programación segura, gobernanza de IA y gestión de riesgos de software.

ver todo
Caso de estudio
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Una cultura de seguridad: cómo Sage creó su programa de defensores

Descubre cómo Sage reforzó su seguridad con un enfoque flexible y centrado en las relaciones, logrando formar a más de 200 expertos en seguridad y alcanzar una reducción de riesgos cuantificable.

Más información
Icono de ventana de navegador con las letras KVK en negrita y dos líneas horizontales azules debajo sobre un fondo azul degradado.
Caso de estudio
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Kamer van Koophandel: Seguridad a escala impulsada por los desarrolladores

La Cámara de Comercio (Kamer van Koophandel) comparte cómo integró la programación segura en el desarrollo diario mediante certificaciones basadas en roles, evaluaciones comparativas de puntuación de confianza y una cultura de responsabilidad compartida en seguridad.

Más información
Logotipo de Insurance Australia Group con texto y un icono en azul y gris dentro del diseño de una ventana de navegador web.
Caso de estudio
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Cómo un «Juego de Códigos» guía a IAG Group hacia un futuro de programación más seguro

IAG Group es la entidad detrás de muchas de las principales compañías de seguros en la región de Asia-Pacífico, que suscribe pólizas para millones de clientes por un valor aproximado de 11.400 millones de dólares australianos en primas anuales.

Más información
Blog
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Mes de la Concienciación sobre Ciberseguridad 2026: Comprender la seguridad de la IA es fundamental para la defensa empresarial

Hemos llegado a un punto en el que la mayoría de las principales empresas de IA han pedido públicamente una ralentización global en el desarrollo de la IA para que las medidas de seguridad puedan ponerse al día, pero la verdad es que ya se han materializado graves problemas de seguridad. Esto deja a innumerables líderes de seguridad y equipos ejecutivos en una situación urgente, a medida que los costes monetarios y de riesgo de la implementación de la IA siguen acumulándose.

Más información
Blog
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Habilitador 8: Branding de su programa

Un programa de codificación segura necesita algo más que un buen contenido para tener éxito. El Habilitador 8 muestra cómo el branding transforma la participación en una experiencia codiciada basada en el estatus.

Más información
Blog
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Cada empleado está ahora en la primera línea de la ciberseguridad de la IA

El panorama tecnológico empresarial está cambiando a una velocidad que pocos previeron hasta que fue demasiado tarde. Hemos cruzado oficialmente el umbral del código escrito por humanos y la asistencia básica de copilotos hacia la era del Ciclo de Vida de Desarrollo Agéntico (ADLC). Si bien los agentes de IA autónomos prometen una eficiencia sin precedentes en múltiples funciones, también traen consigo una clase completamente nueva de riesgos regulatorios y de seguridad.

Más información

Proteja el desarrollo basado en IA antes de su lanzamiento

Identifique riesgos de desarrollo, aplique políticas y prevenga vulnerabilidades en todo el ciclo de vida de su software.

Reservar una demostración
No se encontraron elementos.