If I have a class with a @PostConstruct method, how can I test its constructor and thus its @PostConstruct method using JUnit and Spring? I can't simply use new ClassName(param, param) because then it's not using Spring -- the @PostConstruct method is not getting fired.
Am I missing something obvious here?
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());
}
I have something similar (though slightly more complex) than this and the @PostConstruct method does not get hit.
If the only container managed part of Connection
is your @PostContruct
method, just call it manually in a test method:
@Test
public void test() {
Connection c = new Connection("dog", "ruff");
c.init();
assertEquals("arf arf arf", c.getX1());
}
If there is more than that, like dependencies and so on you can still either inject them manually or - as Sridhar stated - use spring test framework.