Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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#_Nunit_Mstest_Xunit - Fatal编程技术网

C#带“的函数的单元测试结构”;复杂的;参数

C#带“的函数的单元测试结构”;复杂的;参数,c#,nunit,mstest,xunit,C#,Nunit,Mstest,Xunit,我在C#工作,试图找出使用哪个单元测试框架(MSTest、Nunit、Xunit)来最好地接近数据驱动的测试方法。我在单元测试方面有一些经验,但只涉及非常简单的函数。下面定义了我想要应用单元测试的函数,以及我尝试的解决方案和所需解决方案的形式 功能到单元测试 Point3D GetIntersectionPoint(List<Point3D> line1, List<Point3D> line2) 其中,“直线段”是一条直线段。然而,我想用多个交叉口来解决这个问题,我对

我在C#工作,试图找出使用哪个单元测试框架(MSTest、Nunit、Xunit)来最好地接近数据驱动的测试方法。我在单元测试方面有一些经验,但只涉及非常简单的函数。下面定义了我想要应用单元测试的函数,以及我尝试的解决方案和所需解决方案的形式

功能到单元测试

Point3D GetIntersectionPoint(List<Point3D> line1, List<Point3D> line2)
其中,“直线段”是一条直线段。然而,我想用多个交叉口来解决这个问题,我对这个解决方案很感兴趣,因为它相当普遍

尝试的解决方案

在MSTest中,很容易从数据源获取一行数据,因此我在CSV文件中有以下内容:

LineA            LineB                IntersectionPoint
0,0;1,0;2,0      1.5,1;1.5,0;1.5,-1   0,1.5
其中单个点由“;”分隔(x,y)坐标由“,”分隔。这个例子是2D的,只是为了简洁

使用此选项,您可以按如下方式读取每个字符串:

TestContext.DataRow["LineA"].ToString()
然后对其进行解析,得到所需的点列表。然后可以通过如下方式检查:

Assert.AreEqual(parsedIntersectionPoint, GetIntersectionPoint(parsedLine1, parsedLine2))
然而,这似乎相当混乱

所需解决方案

理想情况下,该问题的解决方案应满足以下要求:

  • 添加数据简单(例如序列化对象,与CSV方法一样易于手动输入)
  • 直观(从某种意义上讲,在CSV文件中存储点列表并不容易)
  • 最好坚持使用简单的数据源,如CSV、XML或JSON
  • 实际上,我只是在寻找一种“正确”的方法来解决这个问题,因为我所选择的方向似乎是“错误的”


    任何帮助都将不胜感激

    这是正确的方法,显然对于3D数据集来说很不方便,但是序列化对象不会更简单

    编写3个嵌套循环来对函数进行边界测试并将结果打印到csv可能更容易。然后使用3个嵌套循环(x、y、z)对函数进行单元测试,检查函数中的任何更改都不会更改预期输出

    Assert.AreEqual(parsedIntersectionPoint, GetIntersectionPoint(parsedLine1, parsedLine2))