javacollectionsjunit4parameterized-tests

Pass a list of string values to a parameterized JUnit test


I am trying to pass a collection of string values from a properties file to a parameterized JUnit test. Properties.values() returns Collection while JUnit requires the parameters be passed in Collection structure.

Does that mean I have to convert Collection<Object> to Collection<Object[]>, where each array is actually a single item?

I tried this:

Arrays.asList(new Object[][] {{theProperties.values()}});

But this puts all the values together in one Object and does not create a Collection as I expect it to. Can someone please help?


Solution

  • Looks like parameterized JUnit tests requires a Collection even if each test has a single parameter.

    Converting a Collection to Collection:

    Using Java 8:

    Collection<String> c = Arrays.asList("a", "b");
    Collection<Object[]> co = c.stream()
                                .map(ele -> new Object[]{ele})
                                .collect(Collectors.toList());
    

    Using Java 7 or below:

    Collection<String> coll = Arrays.asList("a", "b");
    Collection<Object[]> params = new ArrayList<Object[]>();
    for (String s : coll) {
        params.add(new Object[] { s });
    }
    

    For Java 7 or below, you can either: