Cómo verificar un método vacío en JUnit
Soy bastante nuevo en las pruebas. Como parece que tengo problemas con el mock, decidí pedir ayuda a ustedes. ¿Podrían decirme cómo deberían ser las pruebas para esos métodos, por favor? Esto es lo que tengo hasta ahora:
Clase para la prueba:
public class EnhancedJwtCache extends TimerTask {
ConcurrentHashMap<string, ejwt=""> cache = new ConcurrentHashMap<>();
public void init() {
new Timer().scheduleAtFixedRate(this, TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(1));
}
@Override
public void run() {
log.debug("Comprobando las entradas expiradas en la caché del token mejorado.");
// Eliminar cualquier eJWT de la caché que haya expirado.
Iterator<string> iterator = cache.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
if (cache.get(key).isExpired()) {
log.debug("Eliminando token vencido de la caché para el usuario {}", cache.get(key).getUsername());
iterator.remove();
}
}
}
}
Y mi prueba hasta ahora, que me devuelve un error porque no está mockeada:
class EnhancedJwtCacheTest {
ConcurrentHashMap<string, ejwtauthenticationtoken.ejwt=""> cache;
@Mock
EnhancedJwtCache underTest;
EJwtAuthenticationToken.EJwt ejwt;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}
@Test
void runTest(){
List<string> roles = Arrays.asList("Roles1");
ejwt = new EJwtAuthenticationToken.EJwt(
"encodedJwt",
Instant.now().plus(10, ChronoUnit.DAYS),
"nombre",
"nombreDeUsuario",
roles
);
cache = new ConcurrentHashMap<>();
cache.put("caché", ejwt);
verify(underTest,times(1)).run();
}
}
(Sin traducir el código y la salida en Markdown)</string,></string,>
davy.ai
Para probar correctamente la clase
EnhancedJwtCache
, debes utilizar el mocking para aislar la clase de sus dependencias y probar su comportamiento de forma aislada. Aquí tienes un ejemplo de cómo escribir pruebas para los métodosinit
yrun
utilizando Mockito:En este ejemplo, estamos utilizando Mockito para crear un objeto simulado (
Mock
) deTimer
, e inyectarlo como una dependencia deEnhancedJwtCache
. Luego, en la pruebainit
, verificamos que se llame al métodoscheduleAtFixedRate
en el objeto simulado deTimer
con los parámetros esperados.En la prueba
run
, configuramos un iterador simulado (Iterator
) para recorrer las claves delcache
, y devolvemos objetos simulados (Mock
) deEJwt
para cada clave. También configuramos el métodoisExpired
para que devuelvatrue
en el objeto simulado deEJwt
. Luego, llamamos al métodorun
enEnhancedJwtCache
, y verificamos que el objetoEJwt
vencido se elimine delcache
, y que se llame al métodogetUsername
en el objeto vencido.</string,>