在JUnit中自动装配:仅绑定Test类中的字段,而不绑定其他类中的字段

时间:2013-10-10 13:39:21

标签: java spring spring-mvc junit autowired

我有以下测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/**/context.xml")
public class HAD_Test extends TestCase {

    @Autowired
    private UgcService ugcService;

    @Test
    public void test() {
        // this binding works fine
        Ugc ugc = ugcService.getRegistro(138355);
        ...
        HAD_Data dData = new HAD_Data(ugc);
        data.init();
        ...
    }
}

然后我有另外一节课:

public class HAD_Data {
    @Autowired
    private ClimaService climaService;

    public void init() {
        ...
        // at this point, climaService is null
        climaService.getRegistro(556)
        ...
    }
}

我遇到的问题是Test类中的绑定是否被完美地应用,但在我使用的任何类中,如HAD_Data,其中存在其他自动装配字段,这些都没有绑定。它们总是具有空值。

我真的不知道为什么没有分配这些绑定。有人能帮帮我吗?如果需要任何其他信息,我可以包含它,但我认为我的context.xml是正确的,因为存在一些应用的绑定确定。

谢谢, 马克

1 个答案:

答案 0 :(得分:1)

如果您是创建对象的人,您如何期望Spring注入该字段?

HAD_Data dData = new HAD_Data(ugc);

Spring只能自动装配托管bean。

context.xml HAD_Data中为@PostConstruct添加一个bean声明并使用它。您还可以在init()方法上使用_,以便Spring在初始化后负责调用它。


另请注意,Java约定不鼓励在类名中使用{{1}}。