You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.7 KiB

JUnitParams 1.0.5 release. Release date : ?

Deprecated $ method

Utility method $ was deprecated. It was causing too much problems and we decided not to support it any more. If you wish to keep using it, implement it in your own codebase.

Automatic class name to class object conversion


    @Test
    @Parameters({"java.lang.Object", "java.lang.String"})
    public void passClassAsString(Class<?> clazz) {
        assertThat(clazz).isIn(java.lang.Object.class, java.lang.String.class);
    }

Thanks to adammichalik for contribution

Support custom annotations for parameter conversion

You can create your own annotations for parameter conversion. Just annotate it with @Param and pass it a reference to Converter implementation.

Example:


    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.PARAMETER)
    @Param(converter = FormattedDateConverter.class)
    public @interface DateParam {

        String format() default "dd.MM.yyyy";
    }

    public static class FormattedDateConverter implements Converter<DateParam, Date> {

        private String format;

        @Override
        public void initialize(DateParam annotation) {
            this.format = annotation.format();
        }

        @Override
        public Date convert(Object param) throws ConversionFailedException {
            try {
                return new SimpleDateFormat(format).parse(param.toString());
            } catch (ParseException e) {
                throw new ConversionFailedException("failed");
            }
        }
    }

Usage example:


    @Test
    @Parameters({"2012-12-01"})
    public void testWithConvertedDate(@DateParam Date date) {
        assertThat(...);
    }

Thanks to bbobcik for inspiration

CustomParameters

You can create custom annotations for parameter providers. @FileParameters have been refactored to use this mechanism and should serve as a perfect usage example.


    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    @CustomParameters(provider = FileParametersProvider.class)
    public @interface FileParameters {

        String fileLocation();
    
    }

    public class FileParametersProvider implements ParametersProvider<FileParameters> {

        private String fileLocation;
    
        @Override
        public void initialize(FileParameters fileParameters) {
            this.fileLocation = fileParameters.fileLocation();
        }
    
        @Override
        public Object[] getParameters() {
            return paramsFromFile(fileLocation);
        }
        
        ...
    }

@CombinedParameters

Thanks to piekarskim The issue #1 is fixed. Using this annotation will result in creating a n-fold cartesian product of parameter values effectively testing each possible combination. Since an example is worth a thousand words:

Such annotated test method:


    @Test
    @CombinedParameters({"a,b", "1,2"})
    public void calledWithCartesianProduct(String character, Integer number) {
    ...
    }

Will be called 4 times with parameters:

 a  1 
 a  2 
 b  1 
 b  2 

Bug fixes and improvements

Thanks to the rest of contributors for lots of bug fixes and improvements:

JUnitParams 1.0.4 release. Release date : 2015-01-23

Configurable test case name

New annotation @TestCaseName that can be used for test case name configuration:

  @Test
  @Parameters({ "1,1", "2,2" })
  @TestCaseName("factorial({0}) = {1}")
  public void custom_names_for_test_case(int argument, int result) { }

will produce tests with names:

factorial(1) = 1
factorial(2) = 2

Thanks to Menliat for contribution.

Allow usage of enums as a data source

Parameters annotation now allows passing Enum values as parameters

@Parameters(source = Fruit.class)

Thanks to ukcrpb6 for contribution.

Test results filtering fixed

When starting a single test method from within an IDE, the tests results were not shown up properly in the results tab. Its fixed now thanks to jerzykrlk

Bug fixes and improvements

Thanks to the rest of contributors for lots of bug fixes and improvements: