如何测试使用 FacesContext.getCurrentInstance() 的方法

问题描述 投票:0回答:1

我正在尝试测试我的代码的一部分,在某些情况下最终会调用

FacesContext.getCurrentInstance()
并且我们不在 jsf 上下文中,它给出 null 并且我收到一个 NullPointerExcetption

我如何测试该部分?

我的代码

测试方法

@Test
void testCambiarNombre() {
    
    ModificarUsuarioBean modificarUsuarioBean = new ModificarUsuarioBean();
    modificarUsuarioBean.setFachada(fachada);
    modificarUsuarioBean.init();
    
    modificarUsuarioBean.getUsuario().setNombre(null);
    modificarUsuarioBean.cambiarNombre(); // Here is the problem. See code of method below
    
    assertTrue(fachada.existeUsuario("admin", null));
}

ModificarUsuarioBean.cambiarNombre

public void cambiarNombre() {
    if(StringUtils.isBlank(usuario.getNombre())) {
        FacesMessagesUtils.mostrarMensajeDelProperties("usuario.accion.cambiarNombre.error.VACIO", "comun.ERROR", FacesMessage.SEVERITY_WARN); // Here is the problem. See code of method below
    } else {
        
        if(fachada.modificarNombreUsuario(usuario)) {
            FacesContext context = FacesContext.getCurrentInstance();
            UsuarioLogueadoBean usuarioLogueadoBean = (UsuarioLogueadoBean)context.getExternalContext().getSessionMap().get("usuarioLogueadoBean");
            usuarioLogueadoBean.getUsuario().setNombre(usuario.getNombre());
            FacesMessagesUtils.mostrarMensajeDelProperties("usuario.accion.cambiarNombre.OK", "comun.EXITO", FacesMessage.SEVERITY_INFO);
        } else {
            FacesMessagesUtils.mostrarMensajeDelProperties("usuario.accion.cambiarNombre.error.REPETIDO", "comun.ERROR", FacesMessage.SEVERITY_WARN);
        }
    }
}

FacesMessagesUtils.mostrarMensajeDelProperties

public static void mostrarMensajeDelProperties(String keyMensaje, String keyCabecera,
        FacesMessage.Severity severidad) {
    FacesMessage msg = new FacesMessage(severidad, MessageUtils.obtenerMensajeDelProperties(keyCabecera),
            MessageUtils.obtenerMensajeDelProperties(keyMensaje));
    FacesContext.getCurrentInstance().addMessage(null, msg); // Here is the NullPointerException
}

pom.xml

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.9.3</version>
        <scope>test</scope>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>5.3.1</version>
        <scope>test</scope>
    </dependency>
            
    <!-- https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-junit-jupiter</artifactId>
        <version>5.3.1</version>
        <scope>test</scope>
    </dependency>

我的Java操作系统版本是8

java junit mocking mockito junit5
1个回答
0
投票

FacesContext.getCurrentInstance()
是静态方法。所以
MockedStatic
可以用来测试所需的流量

@Test
void testCambiarNombre() {
    try (MockedStatic<FacesContext> context = mockStatic(FacesContext.class)) {
        FacesContext facesContext = mock(FacesContext.class);
        context.when(FacesContext::getInstance()).thenReturn(facesContext);
        when(facesContext.getExternalContext()..).thenReturn(..)
        //...
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.