Ниже фабричный класс используется для получения драйверов для исполнения
public class DriverFactory {
//holds the device config
public static Map<String, String> devConfig = new ConcurrentHashMap<>();
//other lines of code follow
}
Этот конфиг загружается в класс junit из внешнего источника данных, как показано ниже:
@RunWith(ConcurrentTestRunner.class)
public class MyTestRunner{
static final int THREAD_COUNT = 1;
@ThreadCount(THREAD_COUNT) @Override @Test
public void run(){
// Devices class returns config for the device
DriverFactory.devConfig = Devices.getConfig()
//other lines of code to perform execution
}
}
Если во время выполнения требуется настройка устройства в другом классе, доступ к нему осуществляется следующим образом:
public class MobileActions{
public void swipe(){
String pf = DriverFactory.devConfig.get("Platform");
//other lines of code
}
}
Этот подход (имеющий devConfig в качестве статического) отлично работает, есть один поток. Теперь, чтобы поддержать параллельное выполнение на устройстве, если число потоков изменено на 2, devConfig всегда будет иметь значение, установленное 2-м потоком.
Чтобы избежать этой проблемы, если devConfig сделан нестатичным, мы должны внедрить эту переменную во все другие классы, например, в вышеупомянутый класс MobileActions.
Есть ли способ, что эта переменная может оставаться статической, но все еще работать во время многопоточного выполнения (каждый поток должен иметь дело со своей собственной копией devConfig). Мы также попытались сделать эту переменную как ThreadLocal <>, но это тоже не помогло.
Любая помощь очень ценится!
Спасибо