es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Implementación de Powermock + Mockito + Testng no funciona.

Así que estoy basando mi implementación en este sitio “http://www.handverdrahtet.org/2012/10/unittest-to-verify-that-static-method.html”, pero me está dando un error:

<h2>Test set: TestSuite</h2>

<p>Tests ejecutados: 3, Fallos: 2, Errores: 0, Saltados: 1, Tiempo transcurrido: 1.675 s <<< FALLIDO! - en TestSuite
com.example.Activity1Test.shouldShowInputDialogOnUpdateTextButtonClick  Tiempo transcurrido: 0.005 s  <<< FALLIDO!
java.lang.reflect.InaccessibleObjectException: No se puede hacer accesible el método nativo protegido java.lang.Object.clone() que lanza java.lang.CloneNotSupportedException: el módulo java.base no "abre java.lang" al módulo sin nombre @30cb5b99
    en com.example.Activity1Test.shouldShowInputDialogOnUpdateTextButtonClick(Activity1Test.java)</p>

<p>com.example.Activity1Test.afterPowerMockTestMethod  Tiempo transcurrido: 0.007 s  <<< FALLIDO!
java.lang.reflect.InaccessibleObjectException: No se puede hacer accesible el método nativo protegido java.lang.Object.clone() que lanza java.lang.CloneNotSupportedException: el módulo java.base no "abre java.lang" al módulo sin nombre @4089713
```</p>

<strong>Aquí está la función test() que utilicé en mi archivo de prueba:</strong>
<code>
public void test(String msg) {
   JOptionPane.showInputDialog("Ingrese una cadena.");
}
</code>

<strong>Aquí está el archivo de prueba actual:</strong>

```java
package com.example;

import static org.mockito.Mockito.*;
import static org.powermock.api.mockito.PowerMockito.*;

import javax.swing.*;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import org.testng.annotations.Test;

@PrepareForTest(JOptionPane.class)
public class Activity1Test extends PowerMockTestCase {
    /**
     * Unittest para verificar que se llama al método estático con el parámetro especificado.
     */

@Test
public void shouldShowInputDialogOnUpdateTextButtonClick() {
    mockStatic(JOptionPane.class);

    Activity1 activity1 = new Activity1();
    activity1.test("foo");

    verifyStatic(JOptionPane.class);
    JOptionPane.showInputDialog("foo");
}
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error parece estar relacionado con la excepción java.lang.reflect.InaccessibleObjectException que se lanza cuando se intenta acceder a un método protegido. Parece ser un problema con el sistema de módulos de Java, ya que está relacionado con el módulo java.base.

    Una posible solución sería agregar el siguiente argumento de línea de comandos al ejecutar las pruebas: --add-opens java.base/java.lang=ALL-UNNAMED. Esto abrirá el paquete java.lang a todos los módulos sin nombre, incluyendo aquel que está causando el problema actualmente.

    Otra opción podría ser utilizar una versión más reciente de las bibliotecas Mockito o PowerMock que pudieran haber solucionado este problema. También es posible buscar ayuda adicional en la comunidad o contactar a los desarrolladores de esas bibliotecas.

Comments are closed.