gpt4 book ai didi

unit-testing - 如何测试使用 session 参数的 JSF bean 方法?

转载 作者:行者123 更新时间:2023-12-04 02:33:22 30 4
gpt4 key购买 nike

我很难在我的 JSF 支持 bean 类上实现单元测试......例如,一些方法使用 session 或请求参数,使用这种代码获得:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("paramKey"); .

我的问题是:如何测试从 session 或请求中获取值的方法?

最佳答案

我通常做的是避免在我要测试的 bean 中调用静态方法 .这意味着要重构您当前的代码:

FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().get("paramKey");

有没有办法用它们的静态方法调用来测试它们?可能有,但他们给我带来的麻烦多于帮助。所以最后我摆脱了它们并改变了我的设计。只需让第二个 bean 来完成(稍后您将对其进行模拟)。在您的情况下,创建一个 @SessionScoped管理该功能的bean:
@ManagedBean
@SessionScoped
public class SessionBean{

public Object getSessionParam(String paramKey){
FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().get(paramKey);
}

}

并将该 bean 注入(inject)每个需要它的 bean 中(我通常从具有它的抽象 bean 扩展我的 View /请求 bean,因此不必在每个 bean 中实现它):
@ManagedBean
@RequestScoped
public class RequestBean{

@ManagedProperty(value="#{sessionBean}")
private SessionBean sessionBean;

public void accessSessionParam(){
sessionBean.getSessionParam("name");
}

}

这样您就可以通过辅助 SessionBean 轻松访问静态方法.那么,如何测试呢?只需创建它的模拟(例如使用 Mockito ):
public class Test{

public void test1(){
SessionBean sb = Mockito.mock(SessionBean.class);
//Mock your 'getSessionParam' method
ValueBean vb = new ValueBean();
Mockito.when(sb.getSessionParam(Mockito.anyString()).thenReturn(vb);
//Create your bean to test and set your mock to it
RequestBean rb = new RequestBean();
rb.setSessionBean(sb);
//here you can test your RequestBean assuming
//sessionBean.getSessionParam()
//will return vb for every single call
}

}

关于unit-testing - 如何测试使用 session 参数的 JSF bean 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17910806/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com