Es ist nur ein Test, um zu überprüfen, ob die Einstellungen in application.properties gebunden sind, aber ich habe Probleme beim Erstellen einer Testklasse.
Transkribieren Sie es als Referenznotiz.
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;
}
}
Registrieren Sie die Bean wie im Beispiel bei @Component, sodass der Einstellungswert mit @ConfigurationProperties an die Variable gebunden ist. (Da es in der Klasse einen Setter mit @ConfigurationProperties gibt, können Variablen ersetzt werden. Ist es als Klasse, die das Setzen von Werten verarbeitet, in Ordnung?)
ApplicateionPropertiesTest.java
@SpringBootTest
@ContextConfiguration(classes = APIMealInfoProperties.class)
class ApplicateionPropertiesTest {
//Testziel
@Autowired
APIMealInfoProperties aPIMealInfoProperties;
@Test
public void Wird der eingestellte Wert zurückgegeben?() {
int expected = 40;
assertEquals(expected, aPIMealInfoProperties.getMealNameLength()); ///org.opentest4j.AssertionFailedError: expected: <40> but was: <0>
expected = 5;
assertEquals(expected, aPIMealInfoProperties.getCalorieLength());
}
}
Selbst wenn ich den Test mit JUnit ausgeführt habe, hat ** aPIMealInfoProperties.getMealNameLength () ** "0" zurückgegeben, sodass er fehlgeschlagen ist.
Der Einstellungswert ist nicht an die Instanzvariable von ** APIMealInfoProperties ** gebunden, die @Autowired ist. (Der Standardwert der Instanzvariablen vom Typ int ist 0) Mit anderen Worten, ** APIMealInfoProperties ** fehlt möglicherweise der Prozess des Lesens ** application.properties ** und des Bindens an eine Variable.
Ich habe es geschafft, es zu lösen, indem ich mich auf verschiedene Artikel im Kampf mit dem Google-Lehrer bezog.
ApplicateionPropertiesTest.java
@SpringBootTest
@ContextConfiguration(classes = ApplicateionPropertiesTest.class)・ ・ ・ ①
@EnableConfigurationProperties(APIMealInfoProperties.class)・ ・ ・ ②
class ApplicateionPropertiesTest {
//Testziel
@Autowired
APIMealInfoProperties aPIMealInfoProperties;
@Test
public void Wird der eingestellte Wert zurückgegeben?() {
int expected = 40;
assertEquals(expected, aPIMealInfoProperties.getMealNameLength());
expected = 5;
assertEquals(expected, aPIMealInfoProperties.getCalorieLength());
}
}
① ・ ・ ・ Geändert, um Ihre eigene Klasse mit @ContextConfiguration anzugeben ② ・ ・ ・ Geben Sie die Testzielklasse (in diesem Fall APIMealInfoProperties) mit @EnableConfigurationProperties an
Obwohl der Test in Ordnung war, ist der Grund nicht gut verstanden. .. .. Ich möchte Sie bitten, zu unterrichten.
Geben Sie der Testklasse die entsprechenden Einstellungen für @ContextConfiguration und @EnableConfigurationProperties.
Ich habe das Spiel gewonnen, aber ich habe immer noch das Gefühl, das Spiel verloren zu haben. (Es kann subtil sein, wenn Sie das Spiel gewinnen ...) Es ist neu in SpringBoot, aber es ist praktisch, aber es wurde durch Anmerkungen getanzt. Ich möchte bald mit dir tanzen.
Recommended Posts