2 回答

TA贡献1744条经验 获得超4个赞
试试unittest.TestSuite()
。这为您提供了一个可以添加测试用例的对象。在您的情况下,创建套件,然后遍历您的列表,创建TestCase
所有实例都只有一个测试方法。将测试数据传递给构造函数并将它们保存到那里的属性而不是 in setUp()
。
当您在调用的方法中创建套件suite()
并运行所有套件时,单元测试运行器将检测套件。
注意:为每个TestCase
实例分配一个名称或找出哪个失败将非常困难。

TA贡献1845条经验 获得超8个赞
让met 尝试描述我如何理解您的方法:您已经实现了许多具有相似性的不同函数,即它们对相同类型的输入数据进行操作。在您的测试中,您尝试利用这种相似性:您创建一些输入数据并将该输入数据传递给您的所有函数。
这种以测试数据为中心的方法是不寻常的。典型的单元测试方法是以代码为中心的。原因是,单元测试的一个主要目标是发现代码中的错误。不同的函数有(显然)不同的代码,因此错误的类型可能不同。因此,测试数据通常经过精心设计,以识别相应代码中的某些类型的错误。测试设计方法是有条不紊地设计测试用例的方法,以便在理想情况下可以检测到所有可能的错误。
我怀疑使用以测试数据为中心的方法,您是否会同样成功地找到不同函数中的错误:对于该volume
函数,可能存在不适用于intersection
or 的溢出场景(以及下溢场景)smallest_containing_box
。相比之下,必须有空交叉点、一点交叉点等。因此,似乎每个功能都可能需要专门设计的测试场景。
关于似乎是以代码为中心的单元测试结果的样板代码:有几种方法可以限制它。同意,您将针对不同的测试功能使用不同的测试方法。但是,您可以使用参数化测试来避免进一步的代码重复。而且,对于您仍然看到为不同功能使用(至少有时)通用测试数据的优势的情况:对于这种情况,您可以使用创建测试数据的工厂函数,并且可以从不同的测试用例中调用. 例如,您可以make-unit-cube
在不同的测试中使用一个工厂函数。
添加回答
举报