[JAVA] Utilisez FacesContext comme maquette avec PowerMockito

introduction

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

supposition

Utilisez les bibliothèques et versions suivantes

  1. java8
  2. junit4.12
  3. PowerMockito (avec 1.7.3)

échantillon

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"));
	}
}

Commentaire

Pour utiliser PowerMockito @ RunWith (PowerMockRunner.class) dans l'annotation de classe Ajoutez @PrepareForTest (FacesContext.class) à l'annotation de méthode

FacesContext.getCurrentInstance () est une méthode statique, alors moquez-la avec PowerMockito.mockStatic Toutes les instances suivantes appelées seront simulées avec mock

Après cela, mock est appelé et le traitement est effectué lors de l'exécution du test

Recommended Posts

Utilisez FacesContext comme maquette avec PowerMockito
Utiliser le format nommé avec la méthode de format de Ruby
Accès avec Selenium comme contre-mesure pour navigator.webdriver
Mock et stub avec minitest (utilisez RR, WebMock, MiniTest :: Mock)
Rendre System.out Mock avec Spock Test Framework
Compte tenu de l'éditeur de propriétés utilisé dans SpringToolSuite (STS)
Utilisez java1.7 (zulu7) dans un répertoire spécifique avec jenv
Utiliser ProGuard avec Gradle
Utiliser Puphpeteer avec Docker
Utilisez XVim2 avec Xcode 12.0.1
Mock Enum avec PowerMock
Utilisation de CentOS avec LXD
Utiliser Webmock avec Rspec
GitHub comme stockage
Utiliser les WebJars avec Gradle
Utilisez jlink avec gradle
Comment demander un fichier CSV au format JSON avec jMeter
Comment s'inscrire en tant que client dans Square à l'aide de Tomcat