Мое решение заключалось в создании класса, который хранит токены на карте и сопоставляет клиента с его токенами для различных сервисов.
Код: Выделить всё
public class TokenManager {
private static final Map tokens = new EnumMap(Client.class);
public static String getToken(Client client, String service) {
if (isTokenExpired(client, service)) {
renewToken(client, service);
}
return tokens.get(client).get(service).getAccessToken();
}
Код: Выделить всё
class BaseTest {
@BeforeEach
void setUp() {
TokenManager.getToken(clientFoo, serviceBar);
}
}
Код: Выделить всё
class SomeTestClass extends BaseTest {
@Override
void setUp() {
super.setUp();
// test-specific setup
}
@Test
void someTest() {
assertTrue(true);
}
@Test
void otherTest() {
assertTrue(false);
}
Мои проблемы:
- Каждый тестовый класс создает новые токены, когда я хочу, чтобы экземпляр TokenManager был создан один раз и предоставлял всем тестам правильные токены, которые обновляются только по истечении срока действия.
- Иногда я получаю исключение NullPointerException следующего содержания:
Код: Выделить всё
java.lang.NullPointerException: Cannot invoke "Token.getAccessToken()" because the return value of "java.util.Map.get(Object)" is null at TokenManager.getToken(TokenManager.java:57) at BaseTest.setUp(BaseTest.java:9) at SomeTest.setUp(SomeTest.java:37)
- Что мне следует сделать, чтобы заставить Junit совместно использовать экземпляр класса TokenManager между разными тестовыми классами?
- Есть ли лучшее решение этой проблемы ?
Подробнее здесь: https://stackoverflow.com/questions/785 ... -in-junit5