В приложении JSF 2.2 я хочу создать военный файл для тестирования с помощью Selenium. В этом webtest.war я хочу заменить центральный класс, называемый NodeCache, фиктивной версией, называемой WebtestNodeCache, чтобы исключить базу данных и другие внешние зависимости из тестов.
NodeCache — это управляемый компонент:
@javax.faces.bean.ManagedBean(name = NodeCache.INSTANCE)
@javax.faces.bean.ApplicationScoped
public class NodeCache {
public static final String INSTANE = "nodecache";
// ...
}
Чтобы проникнуть в WebtestNodeCache, я использую ServletContextListener следующим образом:
public class WebtestContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
WebtestNodeCache nodeCache = new WebtestNodeCache();
ServletContext context = event.getServletContext();
context.setAttribute(NodeCache.INSTANCE, nodeCache);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {}
}
В обычных билдах WebtestContextListener и WebtestNodeCache исключены из war-файла, в тестовых билдах включены.
Кажется, это работает: когда я вхожу в систему, я получаю фиктивные узлы из WebtestNodeCache.
Это надежный способ заменить bean-компонент в контексте приложения или мне просто повезло?
Есть ли лучший способ проникнуть в тестовые манекены?