1

例如:我想对“注销”功能进行案例测试。我可以在“输入”中输入什么?单击 Logout 按钮?,因为该方法没有接收任何参数。预期的输出将返回到 Login 页面。

public String logout() {
  FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
  return "/Login?faces-redirect=true";
}

这一定是一个非常愚蠢的问题,但我不习惯做测试用例,所以我有点迷茫。

4

2 回答 2

0

FacesContext 是一个全局变量。即你可以在其中注入一个模拟。我假设使用 Mockito:

@Test
public testLogout()
{
   //setup
   FacesContext context = Mockito.mock(FacesContext.class);
   ExternalContext externalContext = Mockito.mock(ExternalContext.class);
   FacesContext.setCurrentInstance(context);
   when(context.getExternalContext()).thenReturn(externalContext);
   //act
   bean.logout();
   //verify
   verify(externalContext).invalidateSession();
}

这不是最好的方法,但由于 JSF 设计不当,您应该使用全局变量和隐式依赖项。正确的解决方案包括 IoC 容器和依赖注入。

于 2013-06-09T23:00:48.863 回答
0

从更理论的角度来看,测试用例是:

  • 初始情况/配置(设置)
  • 带有可选参数(输入)的操作(您要测试的那个)
  • 预期成果/产出

如果您正在测试“登录”,您的情况是“我已注销”,您的输入是“log/pwd”

如果您正在测试“注销”,您的情况是“我已登录”并且您没有输入

于 2013-06-11T07:36:50.600 回答