在JMockit中调试部分模拟
问题描述:
使用JMockit 0.999.4和JDK6,是否可以调试到部分模拟类中?在JMockit中调试部分模拟
考虑以下测试:
@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;
}
}
每个在SampleClass和调试系统输出线的放置断点“步过”在Eclipse将进入SampleClass方法。
考虑,这将防止静态初始化从设置staticInt至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;
}
}
一个值。然而,这个代码将不会调试到在SampleClass方法如下。
是的,我试过了-javaagent属性。
答
由Rogerio在JMockit Google's discussion group的回答。
的JVM丢弃它被重新定义 (其JMockit确实每当一个类被嘲笑)后一类设置的断点。
要重置断点,请在测试方法中停止调试程序,只需在 之前将其输入到测试中的代码中。也就是说,在 示例中,在调用“SampleClass”的行上设置 测试方法的断点。
对于好奇,这是JVM错误链接:https://bugs.openjdk.java.net/browse/JDK-7036136 – 2014-06-26 21:15:30