JMockit: проверка вызова метода тестируемого экземпляра класса - PullRequest
0 голосов
/ 30 апреля 2020

В настоящее время у меня есть следующий код для тестирования:

public class TestClass {
    @Tested
    private MyClass myClass = new MyClass();

    @Test
    public void test(@Mocked IntWrapper wrapper) {
        new Expectations() {{
            wrapper.value();
            result = 20;
        }};

        myClass.doSomething(wrapper);

        new Verifications() {{
            myClass.larger();
            times = 1;
        }};
    }
}

class IntWrapper {
    public int value() {
        return 0;
    }
}

class MyClass {
    public void doSomething(IntWrapper wrapper) {
        if (wrapper.value() <= 10) {
            smaller();
        } else {
            larger();
        }

    }

    public void larger() {
        System.out.println("Larger than 10");
    }

    public void smaller() {
        System.out.println("Smaller than 10");
    }
}

Приведенный выше тестовый код вызовет исключение java .lang.NullPointerException в части проверки. Есть ли что-то, чего я не понимаю в отношении использования проверенных классов? Или есть какие-нибудь способы, которыми я могу проверить вызов метода немодулированных экземпляров класса?

Спасибо!

1 Ответ

0 голосов
/ 06 мая 2020

JMockit может быть привередливым. Я склонен

  • объединять Проверки в Ожидания - просто чище
  • добавить тестируемый класс к инициализатору ожиданий (заставляя его высмеивать)
  • избегать определяя конструктор с помощью @Tested, используйте @Injectable по мере необходимости, если только вам не требуется указатель c ctor.
public class TestClass {
    @Tested
    private MyClass myClass;

    @Test
    public void test(@Mocked IntWrapper wrapper) {
        new Expectations(myClass) {{
            wrapper.value();
            times=1;
            result = 20;

            myClass.larger();
            times=1;
        }};

        myClass.doSomething(wrapper);
    }
}
...