[JAVA] Comment se moquer de certaines méthodes de la classe testée

Récemment, je me demande s'il faut écrire en note ou en Qiita.

Comment écrire quand on oublie toujours et qu'on veut toujours se moquer d'une partie.

@Slf4j
@Service
public class HighHolidayService {

	//Liste de vacances résumée sur une base mensuelle
	Map<String, List<LocalDate>> highHolidayCache = new HashMap<>();
	
    //Méthode à tester
	public List<LocalDate> getHolidayList(LocalDate targetDate) {
		String key = String.format("%d%02d", targetDate.getYear(), targetDate.getMonthValue());
		if (highHolidayCache.containsKey(key)) {
			return highHolidayCache.get(key);
		}
		List<LocalDate> holidayList = selectRecords(targetDate);
		highHolidayCache.put(key, holidayList);
		return holidayList;
    }

    //Je veux me moquer de cette méthode!!!!
	List<LocalDate> selectRecords(LocalDate targetDate) {
            return null;
	}
}

--Comment rédiger un test

package jp.co.hogehoge.service;

import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.doReturn;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.mockito.MockitoAnnotations;
import org.springframework.boot.test.mock.mockito.SpyBean;

public class HighHolidayServiceTest {

	@SpyBean    //de springboot@Comment écrire un espion
	HighHolidayService highHolidayService;
	
    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
    }
	@Test
public void Obtenir la liste des jours fériés cible() {
		List<LocalDate> returnHolidayList = new ArrayList<>();
		returnHolidayList.add(LocalDate.of(2019, 07, 28));
		returnHolidayList.add(LocalDate.of(2019, 07, 21));
		returnHolidayList.add(LocalDate.of(2019, 07, 15));
		returnHolidayList.add(LocalDate.of(2019, 07, 14));
		returnHolidayList.add(LocalDate.of(2019, 07, 7));
        // doReturn(Objet à retourner).when(objet espion).method()
        //Oubliez cette façon d'écrire! !!
		doReturn(returnHolidayList).when(highHolidayService).selectRecords(anyObject());

		LocalDate date = LocalDate.of(2019, 7, 15);
		List<LocalDate> holidayList = highHolidayService.getHolidayList(date);
		holidayList.forEach(System.out::println);
	}
}

Il est normal de se moquer de chaque classe parce que je le fais souvent, mais j'oublie de me moquer d'une partie de la cible de test car elle n'apparaît qu'occasionnellement. .. Ou plutôt, il y a beaucoup de discussions qu'il vaut mieux classer (oui, mais c'est logique qui n'a pas besoin d'être tant que ça).

Recommended Posts

Comment se moquer de certaines méthodes de la classe testée
Partie de la classe appelée à partir de la classe testée dans le mémo de méthode JMockit Mock
Comment utiliser la classe wrapper
Diverses méthodes de la classe String
Comment utiliser les méthodes de classe [Java]
[Java] Comment utiliser la classe File
Comment déterminer le nombre de parallèles
[Traitement × Java] Comment utiliser la classe
Comment trier une liste de SelectItems
[Java] Comment utiliser la classe Calendar
Comment savoir quelle version Java d'un fichier de classe a été compilée
[Java] Comment accéder au début d'une chaîne spécifique à l'aide de la classe String
Comment trouver la cause de l'erreur Ruby
Comment exécuter une méthode et simuler avec JUnit
Personnalisez la répartition du contenu de Recyclerview
Comment obtenir le jour d'aujourd'hui
Sortie de la façon d'utiliser la méthode slice
Comment afficher le résultat du remplissage du formulaire
[Java] Comment obtenir l'URL de la source de transition
Comment écrire Scala du point de vue de Java
Obtenez le nom du scénario de test dans la classe de test JUnit
[Java] Comment obtenir la valeur maximale de HashMap
[Rails] Comment changer le nom de colonne de la table
[Android] Comment obtenir la langue de réglage du terminal
[Rails] Comment obtenir le contenu des paramètres forts
Comment juger le clic de n'importe quelle zone de l'image
Comment télécharger une ancienne version d'Apache Tomcat
[Swift] Comment obtenir l'ID de document Firebase
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Comment obtenir le nom d'une classe / méthode exécutée en Java
Comment afficher le champ de sélection de time_select toutes les 30 minutes
Comment utiliser la classe Java
Comment valider les tests suivants même si le test échoue
Comment obtenir les informations les plus longues de Twitter à partir du 12/12/2016
Comment déplacer une autre classe avec une action de bouton d'une autre classe.
[Ruby] Comment récupérer le contenu du double hachage
Comment ajouter des éléments sans spécifier la longueur du tableau
[Rails] Comment afficher une liste de messages par catégorie
Comment dériver le dernier jour du mois en Java
Je souhaite rechercher de manière récursive la liste des classes sous le package
Comment modifier le contenu du fichier jar sans décompresser
Comment vérifier l'extension et la taille des fichiers téléchargés
[jsoup] Comment obtenir la totalité de la documentation
[Swift] Comment modifier dynamiquement la hauteur de la barre d'outils sur le clavier
[Rails] Comment obtenir l'URL de la source de transition et la rediriger
[Swift5] Comment obtenir un tableau et un ensemble de différences entre les tableaux
Comment définir l'adresse IP et le nom d'hôte de CentOS8
Comment afficher 0 sur le côté gauche de la valeur d'entrée standard
[Rails / Heroku / MySQL] Comment réinitialiser la base de données de l'application Rails sur Heroku
Comment obtenir le contenu de la carte à l'aide du mémorandum d'instructions
[Rails] Comment omettre l'affichage de la chaîne de caractères de la méthode link_to
[Rails] Comment changer le titre de la page du navigateur pour chaque page
Comment obtenir l'identifiant de la clé PRIMAY incrémentée automatiquement dans MyBatis