Class Parameterized

  • All Implemented Interfaces:
    Describable, Filterable, Sortable

    public class Parameterized
    extends Suite

    The custom runner Parameterized implements parameterized tests. When running a parameterized test class, instances are created for the cross-product of the test methods and the test data elements.

    For example, to test a Fibonacci function, write:
     @RunWith(Parameterized.class)
     public class FibonacciTest {
            @Parameters(name= "{index}: fib({0})={1}")
            public static Iterable<Object[]> data() {
                    return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 },
                     { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } });
         }
    
            private int fInput;
    
            private int fExpected;
    
            public FibonacciTest(int input, int expected) {
                    fInput= input;
                    fExpected= expected;
         }
    
            @Test
            public void test() {
                    assertEquals(fExpected, Fibonacci.compute(fInput));
         }
     }
     

    Each instance of FibonacciTest will be constructed using the two-argument constructor and the data values in the @Parameters method.

    In order that you can easily identify the individual tests, you may provide a name for the @Parameters annotation. This name is allowed to contain placeholders, which are replaced at runtime. The placeholders are

    {index}
    the current parameter index
    {0}
    the first parameter value
    {1}
    the second parameter value
    ...
    In the example given above, the Parameterized runner creates names like [1: fib(3)=2]. If you don't use the name parameter, then the current parameter index is used as name.

    You can also write:
     @RunWith(Parameterized.class)
     public class FibonacciTest {
      @Parameters
      public static Iterable<Object[]> data() {
          return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 },
                     { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } });
         }
      @Parameter(0)
      public int fInput;
    
      @Parameter(1)
      public int fExpected;
    
      @Test
      public void test() {
          assertEquals(fExpected, Fibonacci.compute(fInput));
         }
     }
     

    Each instance of FibonacciTest will be constructed with the default constructor and fields annotated by @Parameter will be initialized with the data values in the @Parameters method.

    Since:
    4.0
    • Constructor Detail

      • Parameterized

        public Parameterized​(java.lang.Class<?> klass)
                      throws java.lang.Throwable
        Only called reflectively. Do not use programmatically.
        Throws:
        java.lang.Throwable
    • Method Detail

      • getChildren

        protected java.util.List<Runner> getChildren()
        Description copied from class: ParentRunner
        Returns a list of objects that define the children of this Runner.
        Overrides:
        getChildren in class Suite