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

标签 java unit-testing testing

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

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

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

最佳答案

FacesContext 是一个全局变量。 IE。你可以在其中注入(inject)一个模拟。我假设使用 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 容器和依赖项注入(inject)。

关于java - 如何指定没有输入的测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17014743/

相关文章:

使用 Lambda 表达式或 Func 委托(delegate)的 C# Moq 单元测试

java - 简单的Java api来形成和发送ntp数据包

testing - 重复 "Asynchronous Sessions cleanup phase starting NOW"

java - 无法通过 Java servlet 发送电子邮件

unit-testing - 不要模拟域对象规则?

java - 使用Mockito模拟spring的LocalContainerEntityManagerFactoryBean方法?

python - Django 固定装置具有所有可能的组合?

testing - 为系统制作自动化测试用例,无需手动从数据库中删除记录即可保存唯一数据

java - Java中的参数化类

java - 验证不适用于 Spring Boot 和 Hibernate