JSF 2.2 애플리케이션에서 Selenium 테스트 용 war 파일을 빌드하려고합니다. webtest.war에서 NodeCache라는 중앙 클래스를 WebtestNodeCache라고하는 모의 버전으로 대체하여 데이터베이스 및 기타 외부 종속성을 테스트에서 제외 시키려고합니다.테스트 용 ServletContext 리스너가있는 JSF 업데이트 관리 빈
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 전쟁 파일에서 제외됩니다 빌드를, 테스트 빌드에는 포함되어 있습니다.
이것이 작동하는 것 같습니다. 로그인 할 때 WebtestNodeCache에서 더미 노드를 얻습니다.
응용 프로그램 컨텍스트에서 빈을 대체 할 수있는 확실한 방법입니까, 아니면 운이 좋았습니까?
테스트 더미에서 몰래 들어가는 더 좋은 방법이 있습니까?