2016-07-25 151 views
2

使用自动装配Autowired类属性我有下面的类在我的春天启动的应用程序春季启动如何调用方法

public class ClassA { 

    @Autowired 
    PropertiesClass propertiesClass; 

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

这里,propertiesClass实际上包含了从application.properties文件读取属性值的方法。我想单元测试getMeSomeValue方法。下面

@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); 
    } 
} 

我的单元测试类被给予当我运行单元测试,我在那里propertiesClass的方法getMeSomeValue方法中调用点获得空指针异常。 Spring引导中有没有办法使@Autowired工作?

+0

当你通过'new'手动实例化'ClassA'时,Spring IoC容器(app context)没有机会注入你的'PropertiesClass' bean。考虑在你的测试配置中创建一个'ClassA' bean? – CollinD

回答

2

而不是

ClassA classA = new ClassA(); 

操作方法......

@Autowired 
ClassA classA; 

这样CLASSA豆将内Spring容器可用。

1

在ClassA上调用新的构造函数不会注入您的有线PropertiesClass,因为它不是由Spring创建的。

而是做

@Autowired 
ClassA classA; 

确保豆称为MyApplication.class,这将作为您不使用组件扫描使它们可在上下文。