gpt4 book ai didi

具有 "complex"参数的函数的 C# 单元测试结构

转载 作者:行者123 更新时间:2023-11-30 12:24:09 25 4
gpt4 key购买 nike

我在 C# 中工作,并试图弄清楚要使用哪个单元测试框架(MSTest、Nunit、Xunit),以便最好地采用数据驱动的测试方法。我有一些单元测试经验,但只有非常简单的功能。下面定义了我想对其应用单元测试的功能,以及我尝试的解决方案和所需解决方案的形式。

函数到单元测试

Point3D GetIntersectionPoint(List<Point3D> line1, List<Point3D> line2)

它从任意长度和线段的两条线(假设它们相交于一个点)返回一个 3D 点 (x,y,z)。可以说您需要测试的只是更简单的函数:

Point3D GetIntersectionPointSimple(LineSegment segment1, LineSegment segment2)

其中“LineSegment”是一条直线段。但是,我想用多个交叉点捕获案例,并且对解决方案很感兴趣,因为它相当通用。

尝试的解决方案

在 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) 坐标由“,”分隔。为了简洁起见,此示例是二维的。

有了这个,你可以像这样读入每个字符串:

TestContext.DataRow["LineA"].ToString()

然后解析它得到想要的点列表。然后可以这样检查:

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

然而,这看起来很困惑。

所需的解决方案

理想情况下,此问题的解决方案应满足以下条件:

  1. 添加数据简单(例如序列化对象,像 CSV 方法一样易于手动输入)
  2. 直观(在某种意义上,在 CSV 文件中存储点列表不是)
  3. 最好坚持使用 CSV、XML 或 JSON 等简单数据源。

真的,我只是在寻找“正确”的方法来解决这个问题,因为我选择的方向似乎是“错误的”。

如有任何帮助,我们将不胜感激!

最佳答案

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

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

关于具有 "complex"参数的函数的 C# 单元测试结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34645339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com