[JAVA] So testen Sie eine Klasse, die application.properties mit SpringBoot verarbeitet (Anfrage: darauf hingewiesen)

Ich wollte die Bestätigung des Einstellwerts von application.properties testen

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.

Festlegen des Werts in der Zielanwendung.Eigenschaften

application.properties



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

Klasse, die die obigen Einstellungen verarbeitet

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?)

Testklasse der oben genannten Klasse (schlechtes Muster)

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.

Lösung

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.

Zusammenfassung

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

So testen Sie eine Klasse, die application.properties mit SpringBoot verarbeitet (Anfrage: darauf hingewiesen)
So erstellen Sie eine Klasse, die Klasseninformationen erbt
So löschen Sie eine Ressourcendatei mit Spring-Boot
Ein Memo, das eine Klasse behandelt, die unabhängig mit ArrayList erstellt wurde
So fordern Sie mit jMeter eine CSV-Datei als JSON an
Zuordnung zu einer Klasse mit einem Wertobjekt in How to My Batis
So finden Sie heraus, welche Java-Version der Klassendatei kompiliert wurde
So testen Sie den privaten Bereich mit JUnit
So konvertieren Sie einen Soliditätsvertrag in eine Java-Vertragsklasse
So schreiben Sie Testcode mit Basic-Zertifizierung
(Java) Implementieren von equals () für eine Klasse mit durch Vererbung hinzugefügten Wertelementen
So führen Sie die SpringBoot-App als Dienst aus
So schreiben Sie einen Komponententest für Spring Boot 2
So führen Sie mit RxAndroid einen Komponententest mit JVM an einer Quelle durch
So löschen Sie ein mit Rails erstelltes new_record-Objekt
Umgang mit Keine Vorlage für interaktive Anfragen
So generieren Sie manuell ein JWT mit Knock in Rails
[Java] So erhalten Sie eine Anfrage per HTTP-Kommunikation
So führen Sie einen automatischen Test bis zum Start des Browsers effizient durch
[Java] So schneiden Sie eine Zeichenfolge zeichenweise aus
[Java] So unterbrechen Sie eine Zeile mit StringBuilder
Lassen Sie uns herausfinden, wie Sie mit Request Body mit der REST-API von Spring Boot empfangen können
So machen Sie einen Screenshot mit dem Android Studio-Emulator
Lassen Sie uns schreiben, wie API mit SpringBoot + Docker von 0 erstellt wird
Ich habe einen CRUD-Test mit SpringBoot + MyBatis + DBUnit geschrieben (Teil 1)
So führen Sie mit dem Rake-Test von gem nur bestimmte Dateien aus
Ruby mit AtCoder lernen 13 So erstellen Sie ein zweidimensionales Array
Wie man einige Methoden der zu testenden Klasse verspottet
So löschen Sie das Testbild, nachdem Sie den Rspec-Test mit CarrierWave ausgeführt haben
Testen Sie eine Klasse, die einen Kontext empfängt und Dateien liest und schreibt
So richten Sie einen Proxy mit Authentifizierung in Feign ein
So registrieren Sie sich mit Tomcat als Kunde in Square
Umgang mit dem Ereignis, dass Committee :: InvalidRequest während des Rspec-Datei-Upload-Tests im Committee auftritt
Wie gehe ich mit dem Typ um, den ich 2 Jahre lang über das Schreiben eines Java-Programms nachgedacht habe?