Question

soutien printemps JUnit assez bien sur ce point: Avec l'annotation RunWith et ContextConfiguration, les choses semblent très intuitive

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:dao-context.xml")

Ce test sera en mesure de fonctionner à la fois dans Eclipse et Maven correctement. Je me demande s'il y a des choses semblables pour TestNG. J'envisage de passer à ce cadre mais je n'ai pas trouvé un match pour le test avec Spring « Next Generation ».

Était-ce utile?

La solution

Il fonctionne avec TestNG ainsi. Votre test classe doit étendre l'une des classes suivantes:

Autres conseils

Voici un exemple qui a fonctionné pour moi:

import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;

@Test
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class TestValidation extends AbstractTestNGSpringContextTests {

    public void testNullParamValidation() {
        // Testing code goes here!
    }
}

Le printemps et TestNG fonctionnent bien ensemble, mais il y a certaines choses à connaître. Mis à part le sous-classement AbstractTestNGSpringContextTests, vous devez être au courant de la façon dont il interagit avec configuration standard TestNG / annotations teardown.

TestNG a quatre niveaux de configuration

  • BeforeSuite
  • BeforeTest
  • BeforeClass
  • BeforeMethod

qui se produisent exactement comme on peut s'y attendre (excellent exemple d'API d'auto-documentation). Ils ont tous une valeur facultative appelée « dependsOnMethods » qui peut prendre une chaîne ou String [], qui est le nom ou le nom (s) des méthodes au même niveau.

La classe AbstractTestNGSpringContextTests a une méthode annotée BeforeClass appelé springTestContextPrepareTestInstance, que vous devez définir votre méthode de configuration dépendre si vous utilisez une classe autowired en elle. Pour les méthodes, vous n'avez pas à vous soucier de la autowiring, car il se produit lorsque la classe de test est configuré en ce qu'avant méthode de classe.

Cela laisse juste la question de savoir comment vous pouvez utiliser une classe autowired dans une méthode annotée avec BeforeSuite. Vous pouvez le faire manuellement en appelant springTestContextPrepareTestInstance -. Alors que sa configuration par défaut non pour ce faire, je l'ai fait plusieurs fois avec succès

Alors, pour illustrer, une version modifiée de l'exemple Arup:

import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;

@Test
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class TestValidation extends AbstractTestNGSpringContextTests {

    @Autowired
    private IAutowiredService autowiredService;

    @BeforeClass(dependsOnMethods={"springTestContextPrepareTestInstance"})
    public void setupParamValidation(){
        // Test class setup code with autowired classes goes here
    }

    @Test
    public void testNullParamValidation() {
        // Testing code goes here!
    }
}
scroll top