如何使用Spring测试具有@PostConstruct方法的类的构造函数?

如果我有一个具有@PostConstruct方法的类,我如何使用JUnit和Spring测试其构造函数,从而测试其@PostConstruct方法?我不能简单地使用新的ClassName(param,param),因为它没有使用Spring - @PostConstruct方法不会被解雇。

我在这里错过了一些明显的东西吗?

public class Connection {
    private String x1;
    private String x2;

    public Connection(String x1, String x2) {
        this.x1 = x1;
        this.x2 = x2;
    }

    @PostConstruct
    public void init() {
        x1 = "arf arf arf";
    }

}


@Test
public void test() {
    Connection c = new Connection("dog", "ruff");
    assertEquals("arf arf arf", c.getX1());
}

我有类似的东西(虽然稍微复杂一些),@PostConstruct方法不会受到打击。


答案 1

如果唯一受容器管理的部分是您的方法,只需在测试方法中手动调用它:Connection@PostContruct

@Test
public void test() {
  Connection c = new Connection("dog", "ruff");
  c.init();
  assertEquals("arf arf arf", c.getX1());
}

如果还有更多,比如依赖关系等等,你仍然可以手动注入它们,或者像Sridhar所说的那样,使用弹簧测试框架。


答案 2

看看Spring JUnit Runner

您需要将类注入测试类中,以便 spring 将构造类,并且还将调用 post 构造方法。请参阅宠物诊所示例。

例如:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:your-test-context-xml.xml")
public class SpringJunitTests {

    @Autowired
    private Connection c;

    @Test
    public void tests() {
        assertEquals("arf arf arf", c.getX1();
    }

    // ...

推荐