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.
application.properties
api.mealinfo.mealNameLength=40
api.mealinfo.calorieLength=5
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?)
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.
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.
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