Domanda

Supporto Primavera JUnit abbastanza bene su questo: Con la RunWith e ContextConfiguration annotazioni, le cose sembrano molto intuitivo

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

Questo test sarà in grado di eseguire sia in Eclipse e Maven in modo corretto. Mi chiedo se c'è roba simile per TestNG. Sto pensando di trasferirsi in questo "Next Generation" quadro, ma non ho trovato una corrispondenza per il test con la Primavera.

È stato utile?

Soluzione

Altri suggerimenti

Ecco un esempio che ha funzionato per me:

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!
    }
}

La primavera e TestNG funzionano bene insieme, ma ci sono alcune cose da tenere presente. A parte sottoclasse AbstractTestNGSpringContextTests, è necessario essere consapevoli di come interagisce con TestNG standard di annotazioni setup / teardown.

TestNG ha quattro livelli di configurazione

  • BeforeSuite
  • BeforeTest
  • BeforeClass
  • BeforeMethod

che si verificano esattamente come ci si aspetterebbe (grande esempio di API auto-documentazione). Questi hanno tutti un valore opzionale chiamata "dependsOnMethods" che può richiedere una stringa o String [], che è il nome o la ragione (s) dei metodi allo stesso livello.

La classe AbstractTestNGSpringContextTests ha un metodo annotato BeforeClass chiamato springTestContextPrepareTestInstance, che è necessario impostare il metodo di configurazione a dipendere da se si utilizza una classe autowired in esso. Per i metodi, non c'è bisogno di preoccuparsi per l'autowiring, dal momento che si verifica quando la classe di test è configurato in che prima di metodo di classe.

Questo lascia solo la questione di come si potrebbe utilizzare una classe autowired in un metodo annotato con BeforeSuite. È possibile farlo chiamando manualmente springTestContextPrepareTestInstance -. Mentre la sua non è l'installazione di default per fare questo, ho fatto più volte con successo

Quindi, per illustrare, una versione modificata del l'esempio di 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!
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top