JMockit 0.999.4とJDK6を使用すると、部分的に嘲笑されたクラスにデバッグすることは可能ですか? SampleClass方法を入力しますEclipseで「ステップオーバー」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とデバッグにおけるSYSOUTラインのそれぞれにブレークポイントを置く:
は、次の試験を考えてみましょう。
は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;
}
}
の値にstaticInt設定から静的初期化子を防止する次のように検討しかし、このコードはSampleClassにおけるメソッドにデバッグしないであろう。
はい、私は-javaagentプロパティを試しました。
、これはJVMのバグのリンクです:私もJUnitテストメソッドで直接ブレークポイントを設定することはできませんhttps://bugs.openjdk.java.net/browse/JDK-7036136 –
。私はjdk 1.8とEclipse Mars(4.5.1)を使用しています。誰もが同じ問題とそれに対する解決策を持っていますか? – Joern
私は上記のテストとの違いを発見しました。私は、メンバメソッドで '@ Tested'アノテーションを使用しています。 '@ Before'メソッドで手動でSUTを作成することでこれを置き換えると、テストクラス内のブレークポイントが正しく動作しています。 – Joern