Jonny
Jonny

Reputation: 15

Use a ParameterizedTest for localisation bundles

i try to implement a localisation bundle directly to trigger a test multiple times over a parameterizedTest. How i can use the Strings of the ValueSource directly as String parameter of the test and then transform it into a RessourceBundles which can imediatly use the "getString"-method?

        public static ResourceBundle bundleDE = ResourceBundle.getBundle("i18n", new Locale("de", "DE"));
        public static ResourceBundle bundleEN = ResourceBundle.getBundle("i18n", new Locale("en", "EN"));

        @ParameterizedTest
        @ValueSource(strings = {"bundleEN", "bundleDE"})
        public void checkSiteHeadline(String bundle) {
            WebElement headline = driver.findElement((By.xpath("censored")));
            assertEquals(bundle.getString("IMPRINT_HEADER"), headline.getAttribute("innerHTML"));

        }

This here would work in a not parameterized test, but i dont want to write new lines for every language.

assertEquals(bundleEN.getString("IMPRINT_HEADER"), headline.getAttribute("innerHTML"));

Upvotes: 0

Views: 49

Answers (1)

Wishmaster
Wishmaster

Reputation: 51

Use MethodSource:

public static ResourceBundle bundleDE = ResourceBundle.getBundle("i18n", new Locale("de", "DE"));
public static ResourceBundle bundleEN = ResourceBundle.getBundle("i18n", new Locale("en", "EN"));

static Stream<ResourceBundle> bundles() {
    return Stream.of(bundleDE, bundleEN);
}

@ParameterizedTest
@MethodSource("bundles")
void checkSiteHeadline(ResourceBundle bundle) {
    WebElement headline = driver.findElement((By.xpath("censored")));
    assertEquals(bundle.getString("IMPRINT_HEADER"), headline.getAttribute("innerHTML"));
}

Upvotes: 1

Related Questions