我正在使用C#并试图找出要使用哪个单元测试框架(MSTest,Nunit,Xunit)以便最好地采用数据驱动的测试方法。我有一些单元测试的经验,但只有非常简单的功能。我想要应用单元测试的功能定义如下,以及我尝试的解决方案,以及所需解决方案的形式。
单元测试功能
Point3D GetIntersectionPoint(List<Point3D> line1, List<Point3D> line2)
从两条任意长度和段的线返回一个3D点(x,y,z)(假设它们在一个点上相交)。可以说你需要测试的只是更简单的功能:
Point3D GetIntersectionPointSimple(LineSegment segment1, LineSegment segment2)
&#34; LineSegment&#34;是一个单一的直线段。但是我想用多个交叉点来捕获这个案例,并且对解决方案很感兴趣,因为它非常通用。
尝试解决方案
在MSTest中,从数据源中获取一行数据很容易,因此我在CSV文件中有以下内容:
LineA LineB IntersectionPoint
0,0;1,0;2,0 1.5,1;1.5,0;1.5,-1 0,1.5
各个点由&#39;;&#39;分隔。并且(x,y)坐标由&#39;,&#39;分隔。这个例子只是为了简洁而在2D中。
通过这个,您可以读取每个字符串,如:
TestContext.DataRow["LineA"].ToString()
然后解析它以获得所需的点列表。然后可以像下面这样检查:
Assert.AreEqual(parsedIntersectionPoint, GetIntersectionPoint(parsedLine1, parsedLine2))
然而,这似乎很混乱。
所需解决方案
理想情况下,此问题的解决方案将满足以下条件:
我真的只是在寻找&#34;对&#34;这样做的方法,因为我采取的方向似乎是错误的#34;。
任何帮助都将不胜感激!!
答案 0 :(得分:2)
这是正确的方法,显然对于3D数据集而言不方便,但序列化对象并不简单。
编写3个嵌套循环可能更容易,边界测试函数并将这些结果打印到csv。然后使用3个嵌套循环(x,y,z)对函数进行单元测试,检查您在函数中更改的任何内容是否都不会更改预期输出。