如何在构造函数中创建数据时对java方法进行单元测试



我有一个类,它公开了一组api,如下所示

class MyDataProcessor{    
    private int M;
    private double[] data;
    public MyDataProcessor(int N,int M){
        this.M = M;
        this.data = new double[M];
        for(int i=0;i<M;i++){
            int randomX = //get a random value
            double v = processValue(randomX);
            this.data[i] = v;
        }
    private static double processValue(int randomX){
         //do some work on randomX and return a double value
    }
    private double mean(double[] a){
        double meanValue = //find mean of a
        return meanValue;
    }
    private double stddev(double[] a){
        double stdDevValue = //find stddev of a
        return stdDevValue;
    }
    public double lowerBoundConf(){
        double mean = mean(this.data);
        double sd = stddev(this.data);
        double lb = mean + (1.96*stddev)/Math.sqrt(this.M);
        return lb;
    }
}

在这里,我必须对方法lowerBoundConf进行单元测试。我不能为这个方法提供一个双[]数组(这会使它变得简单)。数组必须来自构造函数内部。我想不出如何为此编写测试。有人能帮忙吗?

为了测试类的任何功能,您需要访问数据数组。使字段包最终受保护,以便根据数据值测试方法。

但为什么要在未知的随机数据上测试计算呢?这是无用的(家庭作业?),也是随机的结果。

测试处理随机性的方法总是很困难的。

但是你仍然可以测试整个班级。当你在这里给出特定的参数时,你已经从这个方法中得到了一些东西,这就是你的测试应该是什么样子。

当你不知道返回的具体值时,测试一些信息,比如min/max。

另一个替代方案是使用Mockito这样的Mock框架,这在您的情况下非常困难,因为除了一个方法外,其他所有方法都是私有

最新更新