Я пытаюсь издеваться над вложенным статическим классом, но получаю исключение 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");
}
}
@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");
}
}
Обратите внимание, что JUnit создает новый экземпляр каждого тестового класса перед выполнением каждого тестового метода, что дает вам некоторую свободу при инициализации тестируемого объекта и его соавторов. В этом тривиальном примере вы можете инициализировать все в тестовом методе.
Можете ли вы привести пример, когда вы говорите, что вы можете установить в методе @BeforeEach