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.
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 –
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
Merci! J'ai édité la question et ajouté le code. –