Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试读取文件的方法_C#_Unit Testing - Fatal编程技术网

C# 单元测试读取文件的方法

C# 单元测试读取文件的方法,c#,unit-testing,C#,Unit Testing,我在网上搜索,但找不到合适的解决办法。我的问题是我想测试我的readFileToList方法,它是在文件中制作一个过滤器(csv)和;创建对象列表。 在我的应用程序中,我尝试在单元测试项目中使用以下方法来测试这一点: [TestMethod] public void readingFile() { HomeController controller = new HomeController(); List

我在网上搜索,但找不到合适的解决办法。我的问题是我想测试我的readFileToList方法,它是在文件中制作一个过滤器(csv)和;创建对象列表。 在我的应用程序中,我尝试在单元测试项目中使用以下方法来测试这一点:

        [TestMethod]
        public void readingFile()
        {
           HomeController controller = new HomeController();
           List<City> result = controller.readFileToList("sample_data.csv", Pairing.Of("cityname", "Antalya"));
           Assert.AreEqual(83, result.Count);//"cityname" equals to Antalya is 83 
        }
[TestMethod]
公共无效读取文件()
{
HomeController=新的HomeController();
列表结果=controller.readFileToList(“sample_data.csv”,Pairing.Of(“cityname”,“Antalya”);
Assert.AreEqual(83,result.Count);/“cityname”等于Antalya是83
}
我调试了这个测试,并在函数中看到了错误;“HttpRuntime.AppDomainAppPath”返回null,我想知道如何处理这个问题以及测试这个方法的下一个问题。 我只希望生成文件的测试检查计数等于预期计数(83)

功能:

public List<City> readFileToList(string filename, params KeyValuePair<string, object>[] queryparams)
        {
            string fullName = Path.Combine(HttpRuntime.AppDomainAppPath, "App_Data", filename);
            string[] lines = System.IO.File.ReadAllLines(fullName);
            IQueryable<City> cities = lines.Skip(1).Select(l => new City
            {
                name = l.Split(',')[0],
                cityCode = Convert.ToInt32(l.Split(',')[1]),
                district = l.Split(',')[2],
                zipCode = l.Split(',')[3],
            }).AsQueryable();
            foreach (KeyValuePair<string, object> item in queryparams)
            {
                if (item.Key == "cityname" && item.Value.ToString() != "0")
                    cities = cities.Where(w => w.cityCode.ToString() == item.Value.ToString());               
            }
               return cities.ToList();
        }
public List readFileToList(字符串文件名,参数KeyValuePair[]queryparams)
{
字符串fullName=Path.Combine(HttpRuntime.AppDomainAppPath,“App_数据”,文件名);
string[]lines=System.IO.File.ReadAllLines(全名);
IQueryable cities=行。跳过(1)。选择(l=>新城市
{
name=l.Split(',')[0],
cityCode=Convert.ToInt32(l.Split(',')[1]),
地区=l.Split(',')[2],
zipCode=l.Split(',')[3],
}).AsQueryable();
foreach(queryparams中的KeyValuePair项)
{
if(item.Key==“cityname”&&item.Value.ToString()!=“0”)
cities=cities.Where(w=>w.cityCode.ToString()==item.Value.ToString());
}
返回城市;
}

假设您不太担心,我会说您尝试测试的方法没有一个,但至少:

  • 确定某个文件的服务器路径
  • 解析那个文件
  • 如果您的测试框架(您可以模拟/伪造
    HttpRuntime.AppDomainAppPath
    以返回一些测试文件路径)或者,我建议您将
    readFileToList
    分为两种方法:

  • GetCsvFileServerPath(字符串csvFileName)
    -将
    Path.Combine(HttpRuntime.AppDomainAppPath,“应用程序数据”,文件名)
  • public List ReadFileToList(string fullServerFilePath,params KeyValuePair[]queryparams)
    GetCsvFileServerPath(string csvFileName)
    返回的
    fullServerFilePath
    中处理文件
  • 因此,第二种方法可以相对容易地进行单元测试,而无需进行测试


    p.S.:如果你有时间想做更多适当的单元测试,你可以尝试,或者至少分开文件读取和处理,因为
    ReadFileToList
    同时读取和处理文件,这更难测试。

    假设你不太担心,我想说,您尝试测试的方法没有一个,但至少:

  • 确定某个文件的服务器路径
  • 解析那个文件
  • 如果您的测试框架(您可以模拟/伪造
    HttpRuntime.AppDomainAppPath
    以返回一些测试文件路径)或者,我建议您将
    readFileToList
    分为两种方法:

  • GetCsvFileServerPath(字符串csvFileName)
    -将
    Path.Combine(HttpRuntime.AppDomainAppPath,“应用程序数据”,文件名)
  • public List ReadFileToList(string fullServerFilePath,params KeyValuePair[]queryparams)
    GetCsvFileServerPath(string csvFileName)
    返回的
    fullServerFilePath
    中处理文件
  • 因此,第二种方法可以相对容易地进行单元测试,而无需进行测试


    p.S.:如果您有时间并且想进行更适当的单元测试,您可以尝试,或者至少将文件读取和处理分开,因为
    ReadFileToList
    读取和处理文件,这更难测试。

    “如果您的测试框架支持模拟静态成员”。我不这么认为。我如何添加这个?它是相对于本机库还是第三方组件?@TyForHelpDude并非所有测试框架/第三方库都支持它。我给你的参考讨论了(它不是免费的-你必须使用完整的VS-)。其他一些免费框架支持这样的东西,但不是很多。在任何情况下,最好将文件路径计算和实际解析分开。“如果您的测试框架支持模拟静态成员”。我不这么认为。我如何添加这个?它是相对于本机库还是第三方组件?@TyForHelpDude并非所有测试框架/第三方库都支持它。我给你的参考讨论了(它不是免费的-你必须使用完整的VS-)。其他一些免费框架支持这样的东西,但不是很多。在任何情况下,最好将文件路径计算和实际解析分开。