1

junitparamsを使用して入力ファイルから値を読み取っているこの状況があります。場合によっては、行のすべての列 (たとえば 5 つ) に値がありますが、最初の数列だけに値がある場合もあります。junitparams で使用可能な変数に値を割り当ててから、null またはその他のデフォルト値を残りの変数に割り当てて、入力値を持たないようにしたい junit params でそれを行うことは可能ですか?

入力ファイル

col1,col2,col3,col4,col5 
1,2,3,4,5
1,3,4 
1,3,4,5
1,2,3

私のコードは

@RunWith(JUnitParamsRunner.class)
public class PersonTest {

    @Test
    @FileParameters(value="src\\junitParams\\test.csv", mapper = CsvWithHeaderMapper.class)
    public void loadParamsFromFileWithIdentityMapper(int col1, int col2, int col3, int col4, int col5) {
        System.out.println("col1 " + col1 + " col2 " + col2 + " col3 " + col3 + " col " + col4 + " col5 " + col5);
        assertTrue(col1 > 0);
    }

}

PS 以前はこれを達成するために feed4junit を使用していましたが、junit 4.12 と feed4junit の間の互換性の問題により、junitparams に切り替える必要があります。junit param で同じ動作をシミュレートしたい

4

1 に答える 1

2

不完全な行にいくつかのデフォルトの数値を追加する独自のマッパーを提供することをお勧めします。

@RunWith(JUnitParamsRunner.class)
public class PersonTest {

    @Test
    @FileParameters(value = "src\\junitParams\\test.csv", mapper = MyMapper.class)
    public void loadParamsFromFileWithIdentityMapper(int col1, int col2, int col3, int col4, int col5) {
        System.out.println("col1 " + col1 + " col2 " + col2 + " col3 " + col3 + " col " + col4 + " col5 " + col5);
        assertTrue(col1 > 0);
    }

    public static class MyMapper extends IdentityMapper {

        @Override
        public Object[] map(Reader reader) {
            Object[] map = super.map(reader);
            List<Object> result = new LinkedList<>();
            int numberOfColumns = ((String) map[0]).split(",").length;
            for (Object lineObj : map) {
                String line = (String) lineObj;
                int numberOfValues = line.split(",").length;
                line += StringUtils.repeat(",0", numberOfColumns - numberOfValues);
                result.add(line);
            }
            return result.subList(1, result.size()).toArray();
        }
    }
}
于 2016-05-21T20:41:24.437 に答える