Свойства вставки тестового модуля SpringBoot для объекта, помеченного @InjectMocks - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть класс, который обрабатывает создание jwt:

public class JwtTokenHandler {
    @Value("${jwtSecret}")
    private String jwtSecret;

    @Value("${jwtExpirationInMs}")
    private int jwtExpirationInMs;

    public String generateToken(String subject) {
        Date now = new Date();
        Date expiryDate = new Date(now.getTime() + jwtExpirationInMs);

        return Jwts.builder()
                .setSubject(subject)
                .setIssuedAt(new Date())
                .setExpiration(expiryDate)
                .signWith(SignatureAlgorithm.HS512, jwtSecret)
                .compact();
    }
}

И это займет jwtSecret и jwtExpirationInMs из файла свойств, который находится в папке resources .

В моем модульном тесте я просто хочу проверить, что этот класс работает должным образом и генерирует токен JWT, проблема, с которой я сталкиваюсь, заключается в том, что эти два свойства не вводятся при запуске теста, даже если у меня есть другой файл свойств в test / resources папка.

Я обнаружил, что есть решение, использующее ReflectionTestUtils.setField , но это больше похоже на обходной путь.

Мой юнит-тест выглядит так:

@RunWith(SpringRunner.class)
public class JwtTokenProviderTest {

    @InjectMocks
    private JwtTokenProvider jwtTokenProvider;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testGenerateToken() {
        String result = jwtTokenProvider.generateToken("Test");
        assertThat(result).isNotBlank();
    }

1 Ответ

0 голосов
/ 05 сентября 2018

Вместо @InjectMocks предлагаю посмотреть Spring Boot в аннотации @MockedBean. Подделка бобов намного проще с ним.

...