2016-07-25 29 views
2

autowired Objekte in ganz genannte Methode zu verwenden, ich habe die folgende Klasse in meiner Feder-Boot-AnwendungFrühlings-Boot, wie

public class ClassA { 

    @Autowired 
    PropertiesClass propertiesClass; 

    public Integer getMeSomeValue(Integer someParameter) { 
     // uses some methods of propertiesClass 
    } 
} 

Hier propertiesClass tatsächlich enthält Methoden, die Eigenschaftswerte von application.properties Datei liest. Ich möchte die getMeSomeValue-Methode testen. Meine Einheit Testklasse wird unter

gegeben
@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(MyApplication.class) 
@WebIntegrationTest 
public class ClassATest { 

    @Test 
    public void testGetMeSomeValue() { 
     ClassA classA = new ClassA(); 
     Assert.assertSame("Received expected response", classA.getMeSomeValue(6025), 2345); 
    } 
} 

Wenn ich das Gerät Test ausführen, ich Null-Zeiger-Ausnahme an dem Punkt, wo Methoden der propertiesClass innerhalb getMeSomeValue Methode aufgerufen. Gibt es eine Möglichkeit Spring-Boot zu benutzen, damit @Autowired funktioniert?

+0

Wenn Sie manuell 'ClassA' über' new' instanziiert hat die Feder IoC-Container (ca. Kontext) keine Möglichkeit, Ihre 'PropertiesClass' Bohne zu injizieren. Ziehen Sie in Betracht, eine 'ClassA'-Bean in Ihrer Testkonfiguration zu erstellen? – CollinD

Antwort

2

Statt

ClassA classA = new ClassA(); 

dies tun ...

@Autowired 
ClassA classA; 

Damit classA Bohne innerhalb Frühling Container zur Verfügung stehen wird.

1

den neuen Konstruktor auf KlasseA Aufruf nicht verkabelter PropertiesClass injiziert als es nicht ‚gemacht‘ von Frühling.

Stattdessen tun

@Autowired 
ClassA classA; 

Vergewissern Sie sich, dass die Bohnen in MyApplication.class genannt werden, wird dies in den Kontext zur Verfügung stellen, da Sie nicht Komponente Scannen verwenden.