Pergunta

Spring Support Junit muito bem nisso: com o RunWith e ContextConfiguration anotação, as coisas parecem muito intuitivas

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

Este teste poderá ser executado tanto no Eclipse e Maven no momento. Gostaria de saber se há coisas semelhantes para testng. Estou pensando em mudar para essa estrutura de "próxima geração", mas não encontrei uma correspondência para testar com a primavera.

Foi útil?

Outras dicas

Aqui está um exemplo que funcionou para mim:

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

A primavera e o teste funcionam bem juntos, mas há algumas coisas a serem conscientes. Além da subclasse de abstratoTestngspringContextTests, você precisa estar ciente de como ele interage com as anotações de configuração/desmontagem de teste padrão.

Testng tem quatro níveis de configuração

  • Beforesuite
  • Beforetestest
  • Antes da aula
  • Beforemethod

que ocorrem exatamente como seria de esperar (ótimo exemplo de APIs de autocumentos). Tudo isso tem um valor opcional chamado "dependsonMethods", que pode pegar uma string ou string [], que é o nome ou o nome dos métodos no mesmo nível.

A classe AbstractTestngsPringContextTests possui um método anotado com o BeforeClass chamado SpringtestContextPrepareTestInstance, do qual você deve definir seu método de configuração para depender se estiver usando uma classe automática. Para métodos, você não precisa se preocupar com a sessão automática, pois ocorre quando a classe de teste é configurada nisso antes do método da classe.

Isso apenas deixa a questão de como você pode usar uma classe de retenção automática em um método anotado com Beforesuite. Você pode fazer isso chamando manualmente o SpringtestContextPrepareTestInstance - embora não seja configurado por padrão para fazer isso, já o fiz várias vezes com sucesso.

Então, para ilustrar, uma versão modificada do exemplo de 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!
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top