代码之家  ›  专栏  ›  技术社区  ›  Sheng Hong

如何从文本文件中读取数据并将其作为java中的参数化测试传递给junit测试?

  •  0
  • Sheng Hong  · 技术社区  · 6 年前

    所以我在做JUnit测试。当我在文本文档中获取测试方法的参数时,我遇到了一个问题,即参数对象工作不正常。我的所有参数一次通过测试方法,但我希望它们单独通过。

    下图是我想要的(红线表示第二组参数)。该图像是我的测试方法的一个示例运行。

    https://ibb.co/nFLhOc

    这是我的代码:

        String fileName = "ChargeData.txt";
    
        try 
        {
            scan = new Scanner(new File(fileName));
        }
        catch(FileNotFoundException e)
        {
            e.printStackTrace();
        }
    
        ArrayList<Object[]> Params = new ArrayList<Object[]>();
        List listOfLists = new ArrayList();
    
        ArrayList <Integer> quantityList;
        ArrayList <Boolean> highQualityList;
        ArrayList <Boolean> designEffectList;
        ArrayList <Double> expectedResultList;
    
        while(scan.hasNext())
        {
            quantityList = new ArrayList<Integer>();
            highQualityList = new ArrayList<Boolean>();
            designEffectList = new ArrayList<Boolean>();
            expectedResultList = new ArrayList<Double>();
    
            while(scan.hasNextInt())
            {
                quantityList.add(new Integer(scan.next()));
            }
            for(int i=0;i<quantityList.size();i++)
            {
                highQualityList.add(new Boolean(scan.next()));
            }
            for(int i=0;i<quantityList.size();i++)
            {
                designEffectList.add(new Boolean(scan.next()));
            }
            expectedResultList.add(new Double(scan.next()));
    
            int[] quantity = new int[quantityList.size()];
            boolean[] highQuality = new boolean[quantityList.size()];
            boolean[] designEffect = new boolean[quantityList.size()];
            double[] expectedResult = new double[1];
            for (int i=0; i < quantity.length; i++)
            {
                quantity[i] = quantityList.get(i).intValue();
                highQuality[i] = highQualityList.get(i).booleanValue();
                designEffect[i] = designEffectList.get(i).booleanValue();
            }
            expectedResult[0] = expectedResultList.get(0).doubleValue();
    
            listOfLists.add(quantity);
            listOfLists.add(highQuality);
            listOfLists.add(designEffect);
            listOfLists.add(expectedResult);
        }
        Params.add(listOfLists.toArray());
    
        scan.close();
    
        return Params.toArray();
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Sheng Hong    4 年前

    代码逻辑问题,只需移动 Params.add(listOfLists.toArray()); 内部while loop修复了它。

    while(scan.hasNext())
        {
            quantityList = new ArrayList<Integer>();
            highQualityList = new ArrayList<Boolean>();
            designEffectList = new ArrayList<Boolean>();
            expectedResultList = new ArrayList<Double>();
    
            while(scan.hasNextInt())
            {
                quantityList.add(new Integer(scan.next()));
            }
            for(int i=0;i<quantityList.size();i++)
            {
                highQualityList.add(new Boolean(scan.next()));
            }
            for(int i=0;i<quantityList.size();i++)
            {
                designEffectList.add(new Boolean(scan.next()));
            }
            expectedResultList.add(new Double(scan.next()));
    
            int[] quantity = new int[quantityList.size()];
            boolean[] highQuality = new boolean[quantityList.size()];
            boolean[] designEffect = new boolean[quantityList.size()];
            double[] expectedResult = new double[1];
            for (int i=0; i < quantity.length; i++)
            {
                quantity[i] = quantityList.get(i).intValue();
                highQuality[i] = highQualityList.get(i).booleanValue();
                designEffect[i] = designEffectList.get(i).booleanValue();
            }
            expectedResult[0] = expectedResultList.get(0).doubleValue();
    
            listOfLists.add(quantity);
            listOfLists.add(highQuality);
            listOfLists.add(designEffect);
            listOfLists.add(expectedResult);
            Params.add(listOfLists.toArray());
        }