Совместное использование экземпляра класса несколькими тестами, работающими параллельно в Junit5.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Совместное использование экземпляра класса несколькими тестами, работающими параллельно в Junit5.

Сообщение Anonymous »

Я работаю над тестовой средой для проекта, состоящего из нескольких API. Для каждого из них у меня есть отдельный клиент, которому необходимо авторизоваться с помощью разных токенов. Тесты выполняются параллельно.
Мое решение заключалось в создании класса, который хранит токены на карте и сопоставляет клиента с его токенами для различных сервисов.

Код: Выделить всё

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();
}
...и вызовите getToken() в методе @BeforeEach базового класса, который затем расширяется каждым тестом, вот так

Код: Выделить всё

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 был создан один раз, перед запуском всех тестов (либо через maven, либо через Intellij runner). На самом деле он создается для каждого тестового класса. Таким образом, токены распределяются между разными тестами одного и того же класса, но не между тестами разных классов. Как упоминалось ранее, тесты выполняются параллельно.
Мои проблемы:
  • Каждый тестовый класс создает новые токены, когда я хочу, чтобы экземпляр 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»