如果我有一个带有@PostConstruct方法的类,如何使用JUnit和Spring测试其构造函数,从而测试其@PostConstruct方法?我不能简单地使用new 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方法没有被点击。

最佳答案

看看Spring JUnit Runner

您需要将您的类注入(inject)测试类,以便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();
    }

    // ...

08-03 20:10