Dalam aplikasi JSF 2.2, saya ingin membuat file perang untuk pengujian dengan Selenium. Di webtest.war itu, saya ingin mengganti kelas pusat, yang disebut NodeCache, dengan versi tiruan, yang disebut WebtestNodeCache, untuk menjaga database dan dependensi eksternal lainnya tidak ikut diuji.
NodeCache adalah kacang yang dikelola:
@javax.faces.bean.ManagedBean(name = NodeCache.INSTANCE)
@javax.faces.bean.ApplicationScoped
public class NodeCache {
public static final String INSTANE = "nodecache";
// ...
}
Untuk menyelinap di WebtestNodeCache, saya menggunakan ServletContextListener seperti ini:
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) {}
}
Dalam build normal, WebtestContextListener dan WebtestNodeCache dikecualikan dari file perang, dalam build pengujian, keduanya disertakan.
Tampaknya ini berhasil: ketika saya masuk, saya mendapatkan node tiruan dari WebtestNodeCache.
Apakah ini cara yang dapat diandalkan untuk mengganti kacang dalam konteks aplikasi atau apakah saya hanya beruntung?
Apakah ada cara yang lebih baik untuk menyelinap ke dalam boneka uji?