Как издеваться над вложенным статическим классом в java?

Я пытаюсь издеваться над вложенным статическим классом, но получаю исключение NullPointerException. Можем ли мы это сделать каким-либо образом?

Образец кода: Родительский класс

 class Parent {

        void record(String str) {
          **//Getting a NPE at this line when running test case**
            A.B.append(string);
        }
    }

Вложенный класс

 class A {
        public static B b;

        public static class B {
            public void append(String str) {
              //perform some task
            }
        }
    }

Тестовый класс

    @ExtendWith(MockitoExtension.class)
    public class ParentTest {

        @InjectMock
        Parent parent;

        @Test
        public void dummy_test() {
            A.B writer = mock(A.B.class);
            doNothing().when(writer).append(any());
            parent.record("Text");
        }

    }
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
115
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

@InjectMocks не:

  • вводить статические поля.
  • вводить поля в сотрудничающие классы A

Поскольку ваше статическое поле A.b является общедоступным, вы можете легко установить его в методе @BeforeEach.

@ExtendWith(MockitoExtension.class)
public class ParentTest {

    Parent parent = new Parent();

    @Mock
    A.B writer;

    @BeforeEach
    void setup() {
        A.b = writer;
    }

    @Test
    public void dummy_test() {
        parent.record("Text");
    }

}

Можете ли вы привести пример, когда вы говорите, что вы можете установить в методе @BeforeEach

Harmeet Kaur 24.11.2022 08:14

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

Lesiak 24.11.2022 08:24

Другие вопросы по теме