Ce message est pour se moquer de FacesContext sur junit
Parce que je ne veux pas créer de sous-classes comme FacesContextMock
Décrivez dans un mémorandum comment utiliser PowerMock et faites-le dans la méthode @ Test
Utilisez les bibliothèques et versions suivantes
UserAuth Les informations utilisateur sont gérées dans une session
UserAuth.java
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
/**
*Informations d'identification de l'utilisateur
*/
@ManagedBean
@SessionScoped
public class UserAuth implements Serializable {
/**Identifiant d'utilisateur*/
private String userId;
/**Statut de connexion*/
private boolean logined;
/**
*Processus de déconnexion
*
* @retour URL de l'écran de connexion
*/
public String logout() {
//Supprimer les informations de session
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
//Transit vers l'écran de connexion par redirection
return "/login.xhtml?faces-redirect=true";
}
// ... Setter and Getter
}
** Test UserAuth ** Tester le processus de déconnexion
UserAuth.java
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertThat;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
/**
*Classe de test UserAuth
*/
@RunWith(PowerMockRunner.class)
public class UserAuthTest {
/**Informations d'identification de l'utilisateur*/
private UserAuth userAuth;
/**
*Instanciez la classe des informations d'identification de l'utilisateur
*/
@Before
public void bofore() {
userAuth = new UserAuth();
}
/**
*Tester le processus de déconnexion<br>
*L'URL de la destination de déconnexion est l'écran de connexion.
*/
@Test
@PrepareForTest(FacesContext.class)
public void testLogout() {
//moquer
PowerMockito.mockStatic(FacesContext.class);
FacesContext context = PowerMockito.mock(FacesContext.class);
ExternalContext ext = PowerMockito.mock(ExternalContext.class);
//réglage de la méthode
PowerMockito.when(FacesContext.getCurrentInstance()).thenReturn(context);
PowerMockito.when(context.getExternalContext()).thenReturn(ext);
//Vérifiez l'URL de la destination de déconnexion.
assertThat(userAuth.logout(), containsString("login.xhtml"));
}
}
Pour utiliser PowerMockito
@ RunWith (PowerMockRunner.class) dans l'annotation de classe
Ajoutez @PrepareForTest (FacesContext.class) à l'annotation de méthode
@PrepareForTest (FacesContext.class) peut être une annotation de classe.FacesContext.getCurrentInstance () est une méthode statique, alors moquez-la avec PowerMockito.mockStatic
Toutes les instances suivantes appelées seront simulées avec mock
mock, vous pouvez vous moquer avec Mockito.mock.Après cela, mock est appelé et le traitement est effectué lors de l'exécution du test
Recommended Posts