5

我有几个带有代码测试代码的文件(使用“unittest”类)。

后来我发现测试数据库完整性也很好。我把它放到一个单独的目录树中。(诸如键的格式正确,父节点和子节点指向正确等。编辑:这是一个 nosql 项目,我不能依赖数据库级别的检查,例如引用完整性等。)

我使用相同的 unittest 类进行完整性测试。

现在我想知道把它分开是否真的有意义。为了测试数据的完整性,我经常复制用于测试处理数据的代码的部分代码。

但它不一样。代码测试使用测试数据库(每次测试后都会被删除),完整性测试连接到实时数据并对其进行分析。我想从 cron 调用完整性测试并在实时数据库中发生某些事情时发送警报。

你会怎么处理?这种设置有标准吗?你的经验是什么?

我倾向于将所有内容放在同一个文件中,这将导致代码测试也由生产环境中的 cron 执行。

编辑:我的另一个动力是尽量保持项目简单,不要让单个任务或工作流程涉及太多文件。如果没有所有的测试,我已经有了一个类文件、一个子类、一个相关类、一些库(帮助程序)文件和主代码。测试添加一个文件。它可以帮助我在编码时保持注意力集中,减轻压力,并且我相信我犯的错误更少,并且我可以更快地记住并找到受影响的文件较少的某个代码部分。每个工作流程只有一个测试文件会有所帮助。如果我将其分开,则有 2 个文件(数据完整性测试和代码测试),可能还有 3 个(两者的通用库)。抽象会增加复杂性。

Edit2:我现在正在重构一点,只将数据测试文件移动到代码测试所在的同一目录树,但保留不同的文件,其名称表示“完整性”或“测试”。我不会(还)合并文件,因为有 2 个人反对它,我现在相信他们的经验和建议。我将暂时忍受代码重复。

Edit3:我忘了提到每次运行的测试选择在这种情况下不是由树结构决定的。测试在一个主文件中枚举,所以我目前有2个主文件“完整性”和“代码测试”,测试可以生活在同一个目录结构中。

也许更多人会回答。到目前为止,感谢您提供的宝贵意见,这已经帮助我开发了最终结构!

编辑4:我现在做了更多的重构。看来我应该保留 2 个文件,但目的稍作修改。一种针对生产服务器上的计划监控。另一个用于开发。但在这两个文件中都可以是完整性测试或代码测试。在这两个文件中,操作都可以在测试数据库(测试后被删除)和永久数据库(每个都有一个永久数据库、生产服务器和开发服务器)上执行。还有一件重要的事情:我发现自己将大量通用代码从测试文件转移到类文件中。因此,这些课程也获得了仅供测试的能力。到目前为止我喜欢这个,感觉很干净。我还没有(还)创建一个在 2 个测试前端之间共享的测试库,此代码已转到目前正在测试的对象的类文件。

请注意,我下面的评论是用“user89021”签名的,但这是我,karlthorwald。我对此无能为力。

4

3 回答 3

4

您将它们分开的方法很好。

您对代码重复的担忧是 100% 有效的。

解决方案相当简单——将测试之间的通用功能——例如“RunTest”、“AnalyzeResult”、“ConnectToDB”——抽象到一个通用库中(你没有指定哪种语言,但我认为它有一个库的概念)可以传递配置详细信息,例如要连接到哪个数据库。

然后独立于单元测试驱动程序和完整性测试驱动程序使用该库 - 如果您足够熟练/幸运,除了配置(例如要连接到哪个数据库,如何报告结果以及要运行哪些测试)。

同样,如果需要,可以将公共输入/数据集放在公共目录中

于 2010-04-25T08:07:58.417 回答
4

您应该将与数据库相关的测试与“纯”单元测试分开。
考虑到好处,拥有两个不同程序集的成本非常低 - 您拥有一套快速、无需环境设置的测试套件,您可以在任何机器上运行,还有一套速度较慢的套件,用于测试只能在特定位置运行的数据库完整性(例如构建服务器)。

另一个好处是您可以拥有两个运行不同测试套件的构建过程(快速和夜间)。

为避免重复代码,您可以使用两个测试套件所需的通用方法/操作创建另一个程序集。不要太担心重复实际测试,因为您正在测试不同的东西(逻辑或数据库),因此根据您要测试的内容,您的测试迟早会变得完全不同。

于 2010-04-25T08:12:48.023 回答
0

再来一个答案。您有两种类型的测试。我想做的是解决完整性测试。您可能想要做的是将完整性测试作为生产代码的一个功能。IOW,将完整性作为系统的一部分。

您已经提到重复是一个问题,并且您正在重构以删除重复。重构的代码当然有开发测试?

系统监控可以是生产代码。因此,您编写的任何代码都将成为系统的一部分。

这样做的好处是您可以通过开发测试来改进您的代码。

于 2010-04-26T15:26:19.583 回答