[JAVA] Comment tester une classe qui gère application.properties avec SpringBoot (requête: signalée)

Je voulais tester la confirmation de la valeur de réglage de application.properties

C'est juste un test pour vérifier si les paramètres dans application.properties sont liés, mais j'ai du mal à créer une classe de test.

Transcrivez-le sous forme de mémo pour référence.

Définition de la valeur dans l'application cible.properties

application.properties



api.mealinfo.mealNameLength=40
api.mealinfo.calorieLength=5

Classe qui gère les paramètres ci-dessus

APIMealInfoProperties.java


@Component
@ConfigurationProperties(prefix = "api.mealinfo")
public class APIMealInfoProperties {
	
	private int mealNameLength;
	private int calorieLength;

	public int getMealNameLength() {
		return mealNameLength;
	}

	public void setMealNameLength(int mealNameLength) {
		this.mealNameLength = mealNameLength;
	}

	public int getCalorieLength() {
		return calorieLength;
	}

	public void setCalorieLength(int calorieLength) {
		this.calorieLength = calorieLength;
	}
}

Comme dans l'exemple, enregistrez le bean avec @Component afin que la valeur du paramètre soit liée à la variable avec @ConfigurationProperties. (Puisqu'il y a un setter dans la classe avec @ConfigurationProperties, les variables peuvent être remplacées, mais est-ce correct en tant que classe qui gère la définition des valeurs?)

Classe de test de la classe ci-dessus (mauvais modèle)

ApplicateionPropertiesTest.java


@SpringBootTest
@ContextConfiguration(classes = APIMealInfoProperties.class)
class ApplicateionPropertiesTest {

	//Cible de test
	@Autowired
	APIMealInfoProperties aPIMealInfoProperties;
	
	@Test	
public void La valeur définie est-elle renvoyée?() {
		int expected = 40;
		assertEquals(expected, aPIMealInfoProperties.getMealNameLength()); ///org.opentest4j.AssertionFailedError: expected: <40> but was: <0>
		
		expected = 5;
		assertEquals(expected, aPIMealInfoProperties.getCalorieLength());
		
	}
}

Même si j'ai exécuté le test avec JUnit, ** aPIMealInfoProperties.getMealNameLength () ** a renvoyé "0", donc il a échoué.

La valeur du paramètre n'est pas liée à la variable d'instance de ** APIMealInfoProperties ** qui est @Autowired. (La valeur par défaut de la variable d'instance de type int est 0) En d'autres termes, ** APIMealInfoProperties ** peut manquer le processus de lecture de ** application.properties ** et de le lier à une variable.

Solution

J'ai réussi à le résoudre en me référant à divers articles dans le combat avec le professeur Google.

ApplicateionPropertiesTest.java


@SpringBootTest
@ContextConfiguration(classes = ApplicateionPropertiesTest.class)・ ・ ・ ①
@EnableConfigurationProperties(APIMealInfoProperties.class)・ ・ ・ ②
class ApplicateionPropertiesTest {

	//Cible de test
	@Autowired
	APIMealInfoProperties aPIMealInfoProperties;
	
	@Test	
public void La valeur définie est-elle renvoyée?() {
		int expected = 40;
		assertEquals(expected, aPIMealInfoProperties.getMealNameLength());
		
		expected = 5;
		assertEquals(expected, aPIMealInfoProperties.getCalorieLength());
		
	}
}

① ・ ・ ・ Modifié pour spécifier votre propre classe avec @ContextConfiguration ② ・ ・ ・ Spécifiez la classe cible de test (APIMealInfoProperties dans ce cas) avec @EnableConfigurationProperties

Cependant, bien que le test ait été correct, la raison n'est pas bien comprise. .. .. Je voudrais vous demander d'enseigner.

Résumé

Donnez à la classe de test les paramètres appropriés pour @ContextConfiguration et @EnableConfigurationProperties.

J'ai gagné le match, mais j'ai toujours l'impression d'avoir perdu le match. (Cela peut être subtil si vous gagnez la partie ...) C'est nouveau sur SpringBoot, mais c'est pratique, mais il a été dansé par des annotations. Je veux danser avec toi bientôt.

Recommended Posts

Comment tester une classe qui gère application.properties avec SpringBoot (requête: signalée)
Comment créer une classe qui hérite des informations de classe
Comment sortir un fichier de ressources avec spring-boot
Un mémo qui gère une classe créée indépendamment avec ArrayList
Comment demander un fichier CSV au format JSON avec jMeter
Mappage à une classe avec un objet de valeur dans How to My Batis
Comment savoir quelle version Java d'un fichier de classe a été compilée
Comment tester l'étendue privée avec JUnit
Comment convertir un contrat de solidité en une classe de contrat Java
Comment écrire du code de test avec la certification de base
(Java) Comment implémenter equals () pour une classe avec des éléments de valeur ajoutés par héritage
Comment exécuter l'application SpringBoot en tant que service
Comment écrire un test unitaire pour Spring Boot 2
Comment faire un test unitaire avec JVM sur une source à l'aide de RxAndroid
Comment supprimer un objet new_record construit avec Rails
Comment traiter Aucun modèle de demande interactive
Comment générer manuellement un JWT avec Knock in Rails
[Java] Comment obtenir une requête par communication HTTP
Comment effectuer efficacement un test automatique jusqu'au démarrage du navigateur
[Java] Comment découper une chaîne de caractères caractère par caractère
[Java] Comment rompre une ligne avec StringBuilder
Découvrons comment recevoir avec Request Body avec l'API REST de Spring Boot
Comment faire une capture d'écran avec l'émulateur Android Studio
Écrivons comment créer une API avec SpringBoot + Docker à partir de 0
J'ai écrit un test CRUD avec SpringBoot + MyBatis + DBUnit (Partie 1)
Comment exécuter uniquement des fichiers spécifiques avec le test de rake de gem
Apprendre Ruby avec AtCoder 13 Comment créer un tableau à deux dimensions
Comment se moquer de certaines méthodes de la classe testée
Comment effacer l'image de test après avoir exécuté le test Rspec à l'aide de CarrierWave
Tester une classe qui reçoit un contexte et lit et écrit des fichiers
Comment configurer un proxy avec authentification dans Feign
Comment s'inscrire en tant que client dans Square à l'aide de Tomcat
Comment gérer l'événement où Committee :: InvalidRequest se produit en comité pendant le test de téléchargement de fichier Rspec
Comment gérer le type auquel j'ai pensé en écrivant un programme Java pendant 2 ans