我正在测试我的JSF应用程序(v2.2.14),但是我遇到了一些困难,因为我无法模拟UIViewRoot类。 当我尝试用Mockito模拟这个类时,我收到错误
java.lang.ExceptionInInitializerError
...
...
caused by java.util.MissingResourceException: Can't find javax.faces.LogStrings bundle
我使用viewRoot来管理应用程序的java.util.Locale,有时我需要阅读这些信息。
我可以通过哪种方式模拟这个类以继续我的测试用例?
谢谢!
答案 0 :(得分:0)
目前我已将所有依赖JSF的代码包装在一个现在我可以轻松模拟的类中。
@Component
public class FacesComponent implements Serializable {
public Locale getLocaleFromFrontend() {
return FacesContext.getCurrentInstance().getViewRoot().getLocale();
}
}
然后我的测试类与此类似
@Autowired
@InjectMocks
private LocalDateConverter localDateConverter;
@Autowired
@Spy
private FacesComponent facesComponent;
...
...
MockitoAnnotations.initMocks(this);
Mockito.doReturn(null).when(facesComponent).getLocaleFromFrontend();
答案 1 :(得分:0)
如果使用PowerMockito,则可以使用@SuppressStaticInitializationFor注释删除静态初始值设定项。 https://github.com/powermock/powermock/wiki/SuppressUnwantedBehavior
例如,如果代码是:
object.attr1
以下测试将通过(JavaEE7,PowerMockito 1.6.4):
import java.util.Locale;
import javax.faces.context.FacesContext;
public class TestedClass
{
public Locale getLocale()
{
return FacesContext.getCurrentInstance().getViewRoot().getLocale();
}
}
确保你也压制UIViewRoot的超类。