Я пытаюсь написать модульный тест для класса, который имеет зависимость Autowired.
public class User {
@Autowired
private ServiceContext serviceContext;
User() {}
public String getToken() {
return serviceContext.getToken();
}
Мой класс модульного теста для проверки метода getToken ()
@RunWith(SpringJUnit4ClassRunner.class)
public class UserTest() {
@MockBean
private ServiceContext serviceContext;
@BeforeTest
private void setup() {
when(serviceContext.getToken()).thenReturn("Token");
}
@Test
public void test() {
User user = new User();
assertEquals(user.getToken(), "Token");
}
}
Когда я запускаю этот тест, в getToken()
из User
возникает исключение NullPointerException. Он говорит, что переменная serviceContext
равна нулю.
Почему фиктивный bean-компонент, который я создал в тесте, не может быть автоматически подключен к зависимости в классе User?
Я также пробовал этот тестовый код -
@RunWith(SpringJUnit4ClassRunner.class)
public class UserTest() {
@MockBean
private ServiceContext serviceContext;
@InjectMocks
User useer = new User();
@BeforeTest
private void setup() {
when(serviceContext.getToken()).thenReturn("Token");
}
@Test
public void test() {
assertEquals(user.getToken(), "Token");
}
}
Это также дает исключение NullPointerException, говорящее о том, что зависимость serviceContext
в классе User
равна нулю.
Как выполнить модульное тестирование моих методов класса User с помощью bean-компонента mocked ServiceContext
и связать его с объектами User
?
Я использую конфигурацию пружины на основе аннотаций и не хочу запускать контейнер Spring, чтобы проверить это.
Для запуска моего приложения я использую это -
@Configuration
@EnableConfigurationProperties(ApiProperties.class)
public class ServiceConfiguration {
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON, proxyMode = ScopedProxyMode.TARGET_CLASS)
ServiceContext serviceContext(ApiProperties properties, Parameter param) {
final ServiceContext serviceContext = new ServiceContext(properties, param);
return serviceContext;
}
Мне нужно добавить этот класс в свой @SpringBootTest
?