模拟UserContext和FacesContext - jUnit

时间:2014-03-17 10:47:09

标签: unit-testing jsf jsf-2 junit mockito

我正在尝试编写一些基本的backingBean测试,但我一直在模仿UserContext和facesContext。

此代码位于我正在尝试测试的代码中:

UserContext uc = ContextProvider.getContext();
Locale locale = uc.getLocale();
ResourceBundle bundle = ResourceBundle.getBundle("AppMessages", locale);
String message = bundle.getString("this.is.the.message.key");

在另一段代码中,我得到了以下内容:

FacesContext fc = FacesContext.getCurrentInstance();
fc.getExternalContext().redirect(handleRedirect("someString"));

如何在仅使用mockito的标准jUnit测试中模拟这些?或者我必须使用像PowerMock这样的东西吗?

2 个答案:

答案 0 :(得分:0)

Mockito can't mock static methods。你有几个选择:

  • 将测试中的代码解压缩为将UserContextResourceBundleFacesContext实例作为参数的方法
  • 将静态方法调用包装在factory object中,并将工厂objact实例作为参数传递给测试中的代码
  • PowerMock是一个选项,但会减慢测试执行速度,并且在我看来允许使用糟糕的练习解决方案

答案 1 :(得分:0)

而是为自己创建模拟,你可以使用Apache MyFaces Test,它为JSF工件提供了已经准备好的模拟对象。它可以在更广泛的情况下更好地工作,而且工作量更少。