JMockit: ошибка нулевого указателя, когда фиктивный объект должен быть инициализирован - PullRequest
0 голосов
/ 21 января 2011

Мое понимание JMockit заключается в том, что он заменит все экземпляры смоделированного объекта на макет (если вы не скажете иначе).

Следовательно, я озадачен тем, что получаю NPE после создания экземпляра объекта, который пытаюсь издеваться.

Цель теста не состоит в том, чтобы исследовать объект, вызывающий NPE, но мне нужно его смоделировать, чтобы выполнить тест, поскольку он выполняет некоторые действия с базой данных для проверки некоторого ввода.

Мой тестируемый код похож на это (не копируйте макароны, так как это рабочий код, но, тем не менее, должен подчеркнуть проблему):

public class ClassToTest{

    public execute(){
       MyDependency myDep = getDependency();

        myDep.doSomething(); //I get a NPE here, implying getDependency returned null 
    }

    protected MyDependency getDependency(){
        return new MyDependency("an Arg", "another Arg");
    }

}

Мой метод испытаний:

@Test
public void testCreateHorseDogMeetingByCodeDataProviderTruncated()
    throws IllegalArgumentException, SQLException,
    IllegalCountryLocationCombo, MEPException {

    // Arrange
    ClassToTest myClass = new ClassToTest();

    new NonStrictExpectations() {

        MyDependency mockDep;

        {
            //Set up my expectations, not related to MyDependency
        }
    };

    // Act
    myClass.execute();

    // Assert
    new Verifications() {
        {
            //some verification stuff
        }
    };
}

Может кто-нибудь помочь мне решить эту проблему NPE, чтобы я мог закончить свой тест?

Ответы [ 2 ]

1 голос
/ 21 января 2011

Оказывается, я случайно создал экземпляр подкласса ClassToTest, который переопределил реализацию getDependency и вызвал появление нулевого значения. Должно быть, это была автозаполнение.

0 голосов
/ 21 января 2011

Является ли MyDependency интерфейсом? Возможно, вам также придется высмеивать конкретный класс.

Вы также можете попробовать поместить MyDependency mockDep в список аргументов тестовой функции. Тогда у вас будет смоделированный объект для шага проверки.

...