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