2017-04-12 1 views
1

J'ai beaucoup de classes étendues à partir d'une classe JUnit abstraite qui a plusieurs cas @Test. Le fait est que dans certaines de ces classes étendues, je dois sauter/ignorer tous les cas de test seulement si une variable d'environnement a une valeur spécifique.Sauter/Ignorer les cas de test JUnit dans la méthode Before/Setup basée sur l'environnement Variable

Par exemple, dans des tests ruby ​​suites que je peux faire ce qui suit dans la méthode avant:

require 'rubygems' 
require 'minitest/spec' 
require 'minitest/autorun' 
require 'selenium-webdriver' 

class WebPcAr < MiniTest::Test 

    def setup 

     ... 

     ### SET URLS 
     case ENV['ENVIRONMENT_NAME'] 
     when "test" 
      skip 
     when "preprod" 
      skip 
     when "prod" 
      @base_url = 'http://www.google.com.ar/' 
     else 
      skip 
     end 
    end 

est-il un moyen de faire la même chose en Java? Tout ce que je peux trouver est la façon @Ignore de le faire, mais comme les @Tests que la classe exécute ne sont pas dans la même classe, mais dans la classe abstraite, et ces @Tests sont partagés entre plusieurs autres classes je ne peux pas ajouter @ Ignorer la balise dans ces cas de test @Test. Peut-être avec une @Rule qui n'existe que dans les classes étendues spécifiques qui en ont besoin? Rappelez-vous que les @Tests ne sont pas dans ma classe mais qu'ils sont abstraits et partagés avec d'autres classes qui n'ont pas besoin de les ignorer/de les ignorer. Et que j'ai besoin d'exécuter toutes les classes dans la même course, je ne peux pas passer des arguments spécifiques à la classe à la commande maven, car elle doit être spécifique à la classe.

D'autre façon, je trouve ici Conditionally ignoring tests in JUnit 4 est d'utiliser la ligne "org.junit.Assume.assumeTrue (someCondition());" mais je ne comprends pas comment l'utiliser avec ma variable d'environnement:

@Before 
public void beforeMethod() { 
    org.junit.Assume.assumeTrue(someCondition()); 
    // rest of setup. 
} 

Peut-être quelque chose comme Ignore Test Cases Based on Environment? Est-ce que ne pas sauter/ignorer le test, mais me donne un "org.junit.AssumptionViolatedException: test" erreur

@Override 
public void setUp() throws Exception { 
    assumeTrue(System.getenv("AMBIENTE"), equals("prod")); 
    super.setUp(); 
    ... 

EDIT: Voici ma classe de test:

package My.Site.suitesWeb; 

import static org.junit.Assert.assertTrue; 
//import static org.junit.Assume.assumeTrue; 

import org.junit.Ignore; 
import org.junit.Test; 

import My.Site.classesWeb.*; 

public class TestWebPcMySite extends WebPcBase { 

    @Override 
    public void setUp() throws Exception { 
     // Runs only in prod ENVIRONMENT 
     String currentEnv = System.getenv("AMBIENTE"); 
     String expectedEnv = "prod"; 
     assumeTrue(currentEnv == expectedEnv); 
     // Run parent class setup 
     super.setUp(); 
     // Override with specific classes 
     goTo = new ObjGoToPageWebPcMySite(driver); 
     homePage = new ObjHomePageWebPcMySite(driver); 
     loginPage = new ObjLoginPageWebPcMySite(driver); 
    } 

    // I IGNORE SOME METHODS FROM EXTENDED CLASS 
    @Ignore 
    @Test 
    public void testHigh_LandingPage() throws Throwable { 
    } 

    @Ignore 
    @Test 
    public void testLow_LandingPage_LinkLogin() throws Throwable { 
    } 

    @Ignore 
    @Test 
    public void testLow_LandingPage_LinkRegister() throws Throwable { 
    } 

    // I OVERRIDE OTHER METHODS WITH OTHER CODE 
    @Test 
    public void testHigh_UserLogin_OkUserWithSuscriptionActive() throws Throwable { 
     try { 
      // Test data 

      // Test case 
      goTo.homePage(baseUrl); 
      homePage.loginButton().click(); 

      loginPage.userLogin(usernameLogin, passwordLogin); 
      assertTrue(homePage.profileNameButton().isDisplayed()); 
     } catch (Throwable e) { 
      utilsCommon.errorHandle(e, suiteName, testName); 
      throw e; 
     } 
    } 

} 

Merci à l'avance.

Répondre

2

Dans votre premier exemple il vous suffit de remplacer « conditionquelconque() » avec votre environnement .: vérifier par exemple

@Before 
public void beforeMethod() { 
    String currentEnv = someMethodToGetYourEnvironment(); 
    String expectedEnv = "DEV"; 
    org.junit.Assume.assumeTrue(currentEnv == expectedEnv); 
    // rest of setup. 
} 

Vous pouvez noter que @Before est couru avant chaque méthode. Comme il s'agit d'un contrôle d'environnement, il peut être plus judicieux de le vérifier au niveau de la classe. Même concept mais utilisez @BeforeClass à la place.

+0

Merci! mais avec ce code, l'exécution échoue avec une erreur "org.junit.AssumptionViolatedException: got: , expected: is " au lieu de sauter l'exécution –

+0

Right, donc cette méthode sera toujours exécutée, elle doit tester l'hypothèse, mais le test devrait s'afficher comme étant ignoré au lieu d'échouer. Si vous postez votre classe de test, je pourrais peut-être vous aider davantage. – SomeoneLost

+0

Merci! J'ai édité la question et ajouté le code. –