2016-05-13 2 views
-3

Я тестирую метод в классе. Это вызов метода абстрактного класса.При вызове абстрактного метода из конкретного класса throwing NullPointerException

Например:

class abstract Abstract { 
    public ReturnObject abstractMethod(SomeObject value) { 
    // do something 
    return returnObject; 
    } 
} 

class Concreate extends Abstract { 
    public ReturnObject concreteMethod(SomeObject value) { 
    //do something 
    returnObject = abstractMethod(value); 
    return returnObject; 
    } 

} 

My UT is 

class ConcreateTest { 
    @InjectMocks 
    private Concreate conctrete; 

    @Mock 
    private Concreate conctrete2; 

    @Test 
    public void test_method() { 
    when(conctrete2.abstractMethod(value)).thenReturn(returnObject); 
    conctrete.concreteMethod(value); 
    } 

} 

Таким образом, он возвращает мне NullPointerException.

+1

Вы не добавили минимальный код, который можно было бы скомпилировать? видя код, мы не можем вам помочь, а также добавим ошибку. для быстрого решения. – Ali786

+1

@FaizAli Извините, я отклонил ваше изменение по ошибке, думая, что вы удаляете пробелы, я извиняюсь за это. Но он будет одобрен, чтобы не волноваться. –

ответ

0

Из того, что вы показываете, я вижу очень мало вашего кода, чтобы точно сказать, что происходит, но одна вещь, которую я вижу, это то, что вы издеваетесь над Concreate, а затем впрыскиваете, что макет в другой Concreate. Я не вижу в коде, который вы показываете в любом месте, что говорит мне, что Concreate использует другой вложенный Concreate. Это, по сути, просто псевдокод. Поэтому я предполагаю, что ваш основной Concreate вводится в контексте приложения и что ваш другой Concreate вводится в первый.

Вам нужно @Named, чтобы решить эту двусмысленность, или, в более общем плане, вы должны дать своим фасолям индивидуальное имя, даже если они издеваются.

Смежные вопросы