【发布时间】:2017-05-12 21:16:05
【问题描述】:
在 JSF 2.2 应用程序中,我想构建一个用于使用 Selenium 进行测试的 war 文件。在那个 webtest.war 中,我想用一个名为 WebtestNodeCache 的模拟版本替换一个名为 NodeCache 的中心类,以将数据库和其他外部依赖项排除在测试之外。
NodeCache 是一个托管 bean:
@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 的可靠方法还是我很幸运?
有没有更好的方法来偷偷测试假人?
【问题讨论】: