373 Stimmen

Füllen von Spring @Value während des Unit Tests

Ich versuche, einen Unittest für einen einfachen Bean zu schreiben, der in meinem Programm verwendet wird, um Formulare zu validieren. Der Bean ist mit @Component annotiert und hat eine Klassenvariable, die mit

@Value("${this.property.value}") private String thisProperty; 

initialisiert wird. Ich möchte Unittests für die Validierungsmethoden innerhalb dieser Klasse schreiben, aber wenn möglich möchte ich dies tun, ohne die properties-Datei zu nutzen. Mein Gedanke dahinter ist, dass sich mein Unittest nicht ändern soll, wenn sich der Wert ändert, den ich aus der properties-Datei hole. Mein Unittest testet den Code, der den Wert validiert, nicht den Wert selbst.

Gibt es eine Möglichkeit, Java-Code in meiner Testklasse zu verwenden, um eine Java-Klasse zu initialisieren und die Spring-@Value-Eigenschaft in dieser Klasse zu befüllen, um damit zu testen?

Ich habe diese Anleitung gefunden, die ähnlich ist, aber immer noch eine properties-Datei verwendet. Ich hätte es lieber komplett in Java-Code.

0voto

Atequer Rahman Punkte 1091

Im Inneren der Testmethode muss folgender Code hinzugefügt werden

@Test
public void testIsValidFile() {

    AnyClass anyClass = new AnyClass();
    ReflectionTestUtils.setField(anyClass, "fieldName", "value");
    .........
    .........
}

0voto

Ev.Rei. Punkte 191

Ich hatte ein ähnliches Problem. Wie sich herausstellte, wurde die Testklasse, die vor einiger Zeit von einem früheren Entwickler erstellt wurde, Mockito verwendet und nicht Spring Boot Test. Ich habe Extend With entfernt und die Annotationen @Mock und @Spy durch @MockBean und @SpyBean ersetzt, damit der Test zu einem echten Spring Boot Test wurde. Das hat das Problem gelöst.

-4voto

Zetared Punkte 110

Spring Boot macht automatisch viele Dinge für uns, aber wenn wir die Annotation @SpringBootTest verwenden, denken wir, dass alles automatisch von Spring Boot gelöst wird.

Es gibt viele Dokumentationen, aber das Mindeste ist die Auswahl eines Engine (@RunWith(SpringRunner.class)) und die Angabe der Klasse, die den Kontext erstellen wird, um die Konfiguration zu laden (resources/applicationl.properties).

Auf einfache Weise benötigen Sie den Engine und den Kontext:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyClassTest .class)
public class MyClassTest {

    @Value("${my.property}")
    private String myProperty;

    @Test
    public void checkMyProperty(){
        Assert.assertNotNull(my.property);
    }
}

Natürlich, wenn Sie in die Spring Boot-Dokumentation schauen, finden Sie tausende von Möglichkeiten, dies zu tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X