Java 如何指定没有输入的测试用例

Java 如何指定没有输入的测试用例,java,unit-testing,testing,Java,Unit Testing,Testing,例如:我想对“注销”功能进行一个案例测试。。我可以在“输入”中输入什么?单击注销按钮?,因为该方法没有收到任何参数。。预期的输出将返回到登录页面 公共字符串注销(){ FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); return“/Login?faces redirect=true”; } 这一定是一个非常愚蠢的问题,但我不习惯做测试用例,所以我有点不知所措。FacesContext是一个全

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

公共字符串注销(){
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return“/Login?faces redirect=true”;
}

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

FacesContext是一个全局变量。也就是说,你可以在里面注入一个mock。我假设使用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容器和依赖项注入。

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

  • 初始情况/配置(设置)
  • 带有可选参数(输入)的操作(要测试的操作)
  • 预期成果/产出
如果您正在测试“登录”,您的情况是“我已注销”,您的输入是“log/pwd”


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

测试用例不需要输入。您的方法有两个预期结果。一个是字符串,正式输出。另一个是无效会话,即副作用。构建测试以确保满足这两个期望。正如@OliCharlesworth所说,输入不是必需的。谢谢你们,我认为输入是指定测试用例lol的必需!