JUnitParams 1.0.6 już jest!

Zbigniew Artemiuk

Właśnie udało nam się opublikować wersję 1.0.6 naszej biblioteki JUnitParams.

Przejdźmy przez najnowsze zmiany.

Zmiana domyślnego nazewnictwa testów

Tak jak @ealgell słusznie zauważył, dotychczasowe domyślne nazewnictwo testów (gdzie index przypadku testowego poprzedzał nazwę metody) mogło powodować trudności w analizie testów z raportów segregowanych w kolejności alfabetycznej. Dzięki jego wsparciu domyślne nazewnictwo zostało przemianowane na takie, które jako pierwszy człon podaje nazwę testowanej metody, a dopiero na końcu index przypadku testowego.

Specyficzne adnotacje konwertujące parametry

W JUnitParams mamy możliwość definiowania specyficznych konwerterów, którymi możemy wzbogacać parametry:



    @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 {

        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");
            }
        }
    }
    

Przykład użycia:


    @Test
    @Parameters({"2012-12-01"})
    public void testWithConvertedDate(@DateParam Date date) {
        assertThat(...);
    }
    
    @Test
    @Parameters("2")
    public void useMultipleConvertersFromLeftToRight(@TimesTwo @PlusTwo Integer param) {
        assertThat(param).isEqualTo(2 * 2 + 2);
    }

Od wersji 1.0.6 możemy używać wielu takich konwerterów do każdego z parametrów.

Dziękujemy bbobcik za inspiracje.

Optymalizacja wywoływania testów z parametrami z pliku .csv

Przy wsparciu @bencampion udało się wyeliminować miejsca, które powodowały poważne problemy z wydajnością w przypadku plików csv zawierających dużą liczbę danych.

Zgłoszenie błędu w przypadku nie znalezienia źródła parametrów

Zgodnie z sugestią @matthopkins zajęliśmy się sprawą testów z adnotacją @Parameters, które nie posiadały żadnego źródła parametrów. Do tej pory, jeżeli Runner nie odnalazł parametrów, które mógł zaaplikować do metody, test był ignorowany. Uznaliśmy, że dużo lepszym rozwiązaniem jest poinformowanie programisty o problemie w jego kodzie błędem.

java.lang.IllegalStateException: Method package.className#methodName is annotated with @Parameters but there were no parameters provided.

Przykład integracji JUnitParams ze Springiem

Zdajemy sobie sprawę, że jednym z najczęstszych problemów przy próbie wprowadzenia biblioteki JUnitParams do projektu jest integracja ze Springiem. Zajęliśmy się tym tematem i stworzyliśmy przewodnik dotyczący tego zagadnienia.

Ponadto pozwolę sobie przytoczyć usprawnienia z poprzedniej wersji biblioteki.

Oznaczenie metody $ jako deprecated.

Metoda ‘$’ została oznaczona ‘deprecated’ i nie będzie przez nas dłużej wspierana. Jeżeli chcesz jej użyć możesz zaimplementować jej rozszerzenia wewnątrz swoich testów.

Automatyczna konwersja nazw klas na obiekty


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

Dziękujemy adammichalik za to usprawnienie.

Specyficzni dostawcy parametrów

Została wprowadzona możliwość tworzenia własnych dostawców parametrów. Zrefaktorowaliśmy tym samym dostawcę FileProvider, dzięki czemu jest flagowym przykładem, w jaki sposób możemy korzystać z tego udogodnienia.


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

        String fileLocation();
    
    }

    public class FileParametersProvider implements ParametersProvider {

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

Testy dla iloczynu kartezjańskiego zbioru parametrów

Użycie tej adnotacji pozwala uruchomić przypadek testowy dla iloczynu kartezjańskiego parametrów.
Tak zdefiniowana metoda:


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

zostanie wywołana czterokrotnie z następującymi zestawami parametrów:

Dziękujemy piekarskim za pomoc w rozwiązaniu problemu.

Dziękujemy pozostałym kontrybutorom za wsparcie w rozwoju biblioteki:

* bencampion
* jtbeckha
* szpak
* mkordas
* davidwiking
* bennetelli

comments powered by Disqus