Si j'ai une classe avec une méthode @PostConstruct, comment puis-je tester son constructeur et donc sa méthode @PostConstruct en utilisant JUnit et Spring? Je ne peux pas simplement utiliser new ClassName (param, param), car il n'utilise pas Spring - la méthode @PostConstruct n'est pas renvoyée.
Est-ce que je manque quelque chose d'évident ici?
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();
}
J'ai quelque chose de similaire (quoique légèrement plus complexe) que cela et la méthode @PostConstruct ne soit pas touchée.
Regardez Spring JUnit Runner .
Vous devez injecter votre classe dans votre classe de test pour que spring construise votre classe et appelle également la méthode post-construction. Reportez-vous à l'exemple de la clinique pour animaux de compagnie.
par exemple:
@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();
}
// ...
Si la seule partie gérée par conteneur de Connection
est votre méthode @PostContruct
, appelez-la simplement dans une méthode de test:
@Test
public void test() {
Connection c = new Connection("dog", "ruff");
c.init();
assertEquals("arf arf arf", c.getX1());
}
S'il y a plus que cela, comme des dépendances et ainsi de suite, vous pouvez toujours les injecter manuellement ou - comme l'a dit Sridhar - utiliser le cadre de test du ressort.
Par défaut, Spring n'aura pas connaissance des annotations @PostConstruct et @PreDestroy. Pour l’activer, vous devez soit enregistrer «CommonAnnotationBeanPostProcessor», soit spécifier le «‘ dans le fichier de configuration du bean.
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
ou
<context:annotation-config />
@PostConstruct
doit modifier l'état de l'objet. Ainsi, dans le cas test JUnit, après avoir obtenu le bean, vérifiez l’état de l’objet. S'il est identique à l'état défini par @PostConstruct
, le test est réussi.