【问题标题】:Custom Framework for Writing a Test that Reads a CSV File into a HashMap用于编写将 CSV 文件读入 HashMap 的测试的自定义框架
【发布时间】:2022-01-25 18:50:02
【问题描述】:

我正在尝试完成一个实验室,老师要求我们编写一个可以将 csv 文件读入哈希图的测试。他给了我们两个文件,一个名为“ConfigurationProvider.java”,另一个名为 basses.csv,用于编写数据驱动的 TestNG 案例。

ConfigurationProvider.java 看起来像这样

package framework;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Properties;

public class ConfigurationProvider {

    public HashMap<String, String> getPropertiesFromResourceFile(String fileName) throws Exception {

        InputStream inputStream = null;
        Properties properties = new Properties();

        try {
            inputStream = getClass().getClassLoader().getResourceAsStream(fileName);

            if(inputStream == null) {
                throw new RuntimeException(fileName + " was not found in the Resources folder.");
            }

            properties.load(inputStream);
        }
        finally {
            inputStream.close();
        }

        HashMap<String, String> propertyValuesByKey = new HashMap<String, String>();

        for (String key : properties.stringPropertyNames()) {
            String value = properties.getProperty(key);
            propertyValuesByKey.put(key, value);
        }

        return propertyValuesByKey;
    }
}

basses.csv 看起来像这样

Make,Model,StringCount
Warwick,Corvette,5
Warwick,Thumb,5
Warwick,Streamer,5
Fender,Precision,4
Fender,Jazz,4
Yamaha,BB500,5

到目前为止,我已经编写了如下测试

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import framework.ConfigurationProvider;

public class BassesProvider {

    @Test(dataProvider = "bassProvider")
    public void canPrintMap(String make, String model) {
        System.out.println(make + ":" + model);
    }

    @DataProvider(name = "bassProvider")
    public Object[][] getData() throws IOException {
        
        String FILE_PATH = 
                "C:\\Users\\name\\git\\practice\\automation\\src\\test\\resources\\basses.csv";
        
        ConfigurationProvider basses = new ConfigurationProvider();
        try {
            basses.getPropertiesFromResourceFile(FILE_PATH);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        Object[][] data = new Object[2][7];
        data[0][0] = basses;
        
        return data;
        
    }
}

我收到错误:java.lang.NullPointerException: Cannot invoke "java.io.InputStream.close()" because "inputStream" is null 等...我不确定要进行哪些更改或如何进一步进行。

【问题讨论】:

    标签: java eclipse csv maven testng


    【解决方案1】:

    我不确定要进行哪些更改或如何进一步进行。

    首先,您需要弄清楚代码抛出 NPE 的原因。

    • 仔细查看堆栈跟踪。
    • 找出抛出 NPE 的位置。
    • 找出null 的来源。

    提示 1:仔细阅读 javadoc,了解设置包含 null 的变量的方法。

    现在我的理解是,您的实际任务是编写单元测试。而且(不放弃游戏)您获得 NPE 的原因是您正在测试的代码中的错误和您(嗯)设置测试环境的方式中的缺陷。

    提示 2:您正在测试的 ConfigurationProvider 代码并非旨在从文件系统中的文件加载数据。见提示 1。

    【讨论】:

    • 感谢您的回复。我什至不确定我是否应该将 ConfigurationProvider 作为测试的一部分,或者我是否应该创建自己的 DataProvider。没有很明确的指示。我只是看了看,看到了 HashMap 并认为它可能有用。但我可能错了。我也创建了自己的简单 DataProvider,但我不知道如何将它作为 Object[][] 返回并因此在测试中使用它,因为我不确定如何设置环境。这只是我第二次使用 TestNG,我不确定这些东西是如何真正起作用的。
    • 说真的……如果你没有在这个练习中做你应该做的事情,那么首先你应该做的事情,所以找出来。请您的老师澄清说明。
    猜你喜欢
    • 2018-11-15
    • 2011-09-27
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2016-11-20
    • 2010-09-19
    • 2019-05-15
    相关资源
    最近更新 更多