JunitParamsRunner测试

时间:2017-04-27 01:47:30

标签: java junit junit4

我正在尝试运行以下代码,并且我得到错误的参数错误。

package Homework7;
import static junitparams.JUnitParamsRunner.$;
import static org.junit.Assert.*;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(JUnitParamsRunner.class)

public class Problem3TestClass {
    private Problem3Class p3class;

    @SuppressWarnings("unused")
    public static final Object[] Problem3TestClass(){
        return $(
//              Parameters are: (1, 2)
//              1 = x,2 = y             
//              Test case 1
                $(12223,1)


                );
    }
    @Before
    public void setUp() {
        p3class = new Problem3Class();
    }

    @Test
    @Parameters(method = "Problem3TestClass")
    public void test(int[] x,int y)
    {
        assertEquals(y,p3class.countRepeated(x));
    }

}

我的countRepeated方法按以下方式调用

public int countRepeated (int[] x) 

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

根据source

中的评论

$ method

由于Java解析的方式,不应该用于创建var-args数组 对象和基元的var-args。

因此,尝试将测试方法更改为接受List of Integer而不是int []。 以下代码应该可以使用。

@SuppressWarnings("unused")
public static final Object[] Problem3TestClass() {
    List<Integer> x = new ArrayList<Integer>();
    int y = 2;
    return $(x, y);
}

@Test
@Parameters(method = "Problem3TestClass")
public void test(List<Integer> x, int y) {
    // update countRepeated to accept List<Integer> or do some conversion here
    assertEquals(y, p3class.countRepeated(x));
}

答案 1 :(得分:0)

还建议更改为列表类型。但是,有时候测试代码的实现不会改变。要继续使用int [],可以将其保存为最后一个参数。

import pandas as pd
import numpy as np

np.random.seed(100)
df =  pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
print (df)

def highlight_col(x):
    #copy df to new - original data are not changed
    df = x.copy()
    #set default values to all values
    df.loc[:,:] = 'background-color: ""'
    #set by condition
    if x.iloc[1,1]<x.iloc[1,0]:
        df.iloc[1,1] = 'background-color: red'
    else:
        df.iloc[1,1] = 'background-color: green'
    return df    

df.style.apply(highlight_col, axis=None)

和测试用例方法:

public static final Object[] Problem3TestClass(){
    return $(
        $(12223, new int[] {12223}),
        $(6, new int[] {1,2,3})
    );
}

以下是使用List类型的示例。

@Test
@Parameters(method = "Problem3TestClass")
public void test(int y, int[] x)
{
    assertEquals(y, p3class.countRepeated(x));
}

测试用例方法:

public static final Object[] Problem3TestClass2(){
    return $(
        $(Arrays.asList(1,2,3), 6),
        $(Arrays.asList(1,-4), -3)
    );
}

附上测试中使用的两种快速模拟方法。

@Test
@Parameters(method = "Problem3TestClass2")
public void test2(List<Integer> x, int y)
{
    assertEquals(y, p3class.countRepeated2(x));
}