JMockit 0.999.4 と JDK6 を使用して、部分的にモックされたクラスにデバッグできますか?
次のテストを検討してください。
@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 の各 sysout 行にブレークポイントを配置し、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 プロパティを試しました。