Частичная отладка в JMockit - PullRequest
       15

Частичная отладка в JMockit

5 голосов
/ 27 января 2011

Используя 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;
    }
}

Установка точки останова на каждом из sysoutстроки в SampleClass и отладка «Step Over» в 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.

1 Ответ

7 голосов
/ 31 января 2011

Ответ Rogerio в JMockit Дискуссионная группа Google .

JVM отбрасывает точки останова, установленные для класса после его переопределения (что JMockit делает всякий раз, когда класс подвергается пересмотру).

Чтобы сбросить точки останова, остановите отладчик при тестовом методе непосредственно перед тем, как он вводит тестируемый код.То есть установите точку останова в тестовом методе на строке, которая вызывает в этом примере «SampleClass».

...