Incompatible types. Found: 'java. lang. Class<org. junit. runners. Parameterized>', - Stack Overfl

admin2025-03-16  9

I have the following JUnit 4 test:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.Arrays;
import java.util.Collection;

@RunWith(Parameterized.class)
public class LocaleTest {
    
  @Parameterized.Parameters(name = "{index}: Locale={0}, valid={1}")
  public static Collection<Object[]> opt() {
    Object[][] options = new Object[][]{{"os_PT", true}, {"en_PH", true}......};
    return Arrays.asList(options);
  }

}

I need to migrate it to JUnit 5:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.runners.Parameterized;

import java.util.Arrays;
import java.util.Collection;

@ExtendWith(Parameterized.class)
public class LocaleTest {
    
  @Parameterized.Parameters(name = "{index}: Locale={0}, valid={1}")
  public static Collection<Object[]> opt() {
    Object[][] options = new Object[][]{{"os_PT", true}, {"en_PH", true}......};
    return Arrays.asList(options);
  }

}

But I get error:

Incompatible types. Found: 'java. lang. Class<org. junit. runners. Parameterized>', required: 'java. lang. Class<? extends org. junit. jupiter. api. extension. Extension>[]'

At this line: @ExtendWith(Parameterized.class)

Do you know how I can properly migrater this code?

I have the following JUnit 4 test:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.Arrays;
import java.util.Collection;

@RunWith(Parameterized.class)
public class LocaleTest {
    
  @Parameterized.Parameters(name = "{index}: Locale={0}, valid={1}")
  public static Collection<Object[]> opt() {
    Object[][] options = new Object[][]{{"os_PT", true}, {"en_PH", true}......};
    return Arrays.asList(options);
  }

}

I need to migrate it to JUnit 5:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.runners.Parameterized;

import java.util.Arrays;
import java.util.Collection;

@ExtendWith(Parameterized.class)
public class LocaleTest {
    
  @Parameterized.Parameters(name = "{index}: Locale={0}, valid={1}")
  public static Collection<Object[]> opt() {
    Object[][] options = new Object[][]{{"os_PT", true}, {"en_PH", true}......};
    return Arrays.asList(options);
  }

}

But I get error:

Incompatible types. Found: 'java. lang. Class<org. junit. runners. Parameterized>', required: 'java. lang. Class<? extends org. junit. jupiter. api. extension. Extension>[]'

At this line: @ExtendWith(Parameterized.class)

Do you know how I can properly migrater this code?

Share Improve this question asked Nov 8, 2024 at 14:10 Peter PenzovPeter Penzov 1,766156 gold badges499 silver badges905 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 2

Don't need @RunWith or @ExtendWith now, just:

class MyTests {
    @ParameterizedTest
    @MethodSource("parameterSource")
    void doit(String s, int i){
        assertEquals(s, Integer.toString(i));
    }

    public static Stream<Arguments> parameterSource() {
        return Stream.of(
                Arguments.of("1", 1),
                Arguments.of("2", 2)
        );
    }
}

There are several *Source annotations available.

转载请注明原文地址:http://www.anycun.com/QandA/1742102214a54331.html