Usando JMockit 0.999.4 y JDK6, ¿es posible depurar en una clase parcialmente burlada?Debug Moial parcial en JMockit
Considérese la siguiente prueba:
@Test
public void testClass() {
SampleClass cls = new SampleClass();
System.out.println(cls.getStaticInt());
cls.setVal(25);
System.out.println(cls.getVal());
}
static class SampleClass {
static int staticInt = 5;
private int val;
{
staticInt = 10;
}
public int getStaticInt() {
System.out.println("Returning static int and adding a line for debugging");
return staticInt;
}
public void setVal(int num) {
System.out.println("Setting val and adding a line for debugging");
this.val = num;
}
public int getVal() {
System.out.println("Returning val and adding a line for debugging");
return this.val;
}
}
La colocación de un punto de interrupción en cada una de las líneas sysout en SampleClass y depurar "Paso a paso" en Eclipse entrará en los métodos SampleClass.
considere lo siguiente, lo que impide el inicializador estático de fijar staticInt a un valor de 10.
@Test
public void testClass(@Mocked(methods = "$clinit") SampleClass cls) {
System.out.println(cls.getStaticInt());
cls.setVal(25);
System.out.println(cls.getVal());
}
static class SampleClass {
static int staticInt = 5;
private int val;
{
staticInt = 10;
}
public int getStaticInt() {
System.out.println("Returning static int and adding a line for debugging");
return staticInt;
}
public void setVal(int num) {
System.out.println("Setting val and adding a line for debugging");
this.val = num;
}
public int getVal() {
System.out.println("Returning val and adding a line for debugging");
return this.val;
}
}
Sin embargo, este código no depurar en los métodos de SampleClass.
Sí, he probado la propiedad -javaagent.
Para los curiosos, este es el enlace de error JVM: https://bugs.openjdk.java.net/browse/JDK-7036136 –
Ni siquiera puedo establecer un punto de interrupción directamente en el método de prueba unitaria. Estoy usando jdk 1.8 y Eclipse Mars (4.5.1). ¿Alguien más tiene el mismo problema y una solución? – Joern
Ahora encontré la diferencia con la prueba anterior. Estoy usando la anotación '@ Probado' en un método miembro. Si reemplazo esto creando el SUT manualmente en un método '@ Before', los puntos de interrupción en la clase de prueba funcionan correctamente. – Joern