2010-04-25 87 views
5

我有几个代码测试代码的文件(它使用“单元测试”类)。如何组织实时数据完整性测试和代码单元测试?

后来我发现它也会很好地测试数据库的完整性。我把它放到一个单独的目录树中。 (类似键的东西有正确的格式,父节点和子节点都指向正确,等等。编辑:这是一个nosql项目,我不能依赖数据库级别检查liek参照完整性等)。

我使用完整性测试相同的单元测试类。

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

但它是不一样的。代码测试使用测试数据库(每次测试后删除)和完整性测试连接到实时数据并进行分析。我希望从cron调用完整性测试,并在活动数据库中发生事件时发送警报。

你会如何处理?这样的设置是否有标准?你有什么经验?

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

编辑:也驱使我尝试保持项目简单,并且不要让单个任务或工作流触及太多文件。没有所有的测试,我已经有了一个类文件,一个子类,一个相关的类,一些库(helper)文件和主代码。测试添加一个文件。它可以帮助我在编码时集中注意力,减轻压力,并且我相信我可以减少错误,并且可以更快地记住并找到影响较小文件的特定代码部分。每个工作流程只有一个测试文件可以帮助您。如果我保持独立,则有2个文件(数据完整性测试和代码测试),也可能有3个(两者都有一个通用库)。抽象会增加复杂性。

EDIT2:我现在重构一点点,只有数据测试文件移动到同一个目录树,其中还有代码测试的生命,但保持不同的文件名为表示“诚信”或“测试”。我还没有(合并)这些文件,因为有两个人反对,现在我相信他们的经验和建议。目前我将与代码复制一起生活。

编辑3:我忘了提及每次运行测试的选择不是由树结构决定的。测试枚举在主文件中,所以我目前有2个主文件“完整性”和“代码测试”,并且测试可以存在于同一个directury结构中。

也许更多人会回答。感谢您的宝贵意见,这已经帮助我开发最终结构!

编辑4:我现在做了更多的重构。看来我应该保留2个文件,但略有修改的目的。一个针对生产服务器上的预定监控。另一个发展。但是在两个文件中都可以进行完整性测试或代码测试。在这两个文件中,操作都可以在测试数据库(测试后擦除)和永久性数据库(每个数据库都有一个永久性数据库,生产服务器和开发服务器)上执行。还有一件重要的事情:我发现自己将大量通用代码从测试文件移动到类文件。所以这些类也会获得仅用于测试的功能。我喜欢这个,感觉很干净。我还没有创建一个在两个测试前端之间共享的测试库,这段代码已经到了目前正在尝试的obejct的类文件中。

请注意,下面的评论与“user89021”签署,但它是我,karlthorwald。我无能为力。

回答

4

你应该分离从数据库中的“纯”的单元测试相关的测试。
考虑到优势,拥有两个不同程序集的成本非常低 - 您可以在任何机器上运行一套快速,无需环境设置的必需测试,而测试数据库完整性的较慢套件只能针对特定地方(如建立服务器)。

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

为了避免重复代码,您可以使用两个测试套件都需要的常用方法/操作来创建另一个程序集。不要太担心重复实际的测试,因为你正在测试不同的东西(逻辑或数据库),所以迟早你的测试会变得非常不同,这取决于你想测试的东西。

4

你的分离方法很好。

您对代码重复的关注是100%有效的。

该解决方案相当直截了当 - 抽象出测试之间的通用功能 - 例如, “RunTest”,“AnalyzeResult”,“ConnectToDB” - 放入一个公共库(您没有指定哪种语言,但我认为它有一个库的概念),可以传递配置详细信息,例如连接哪个数据库。

然后独立于单元测试驱动程序和完整性测试驱动程序使用该库 - 如果您技术熟练/够幸运,可能只有非常少的配置代码(例如,要连接哪个数据库,报告结果以及运行哪些测试)。

类似地,如果需要的话,公共输入端/数据集可被放置在公共目录

+0

谢谢。我没有指定,因为我想避免使用语言标记我的问题。图书馆,对象,继承,这里的一切可能。 – user89021 2010-04-25 08:12:08

+0

接受答案并不容易,因为他们都很好,帮助了我。非常感谢你。 – user89021 2010-04-26 09:09:20

0

还有一个答案。你有两种类型的测试。我想要做的是解决完整性测试。您可能想要做的是将完整性测试作为产品代码的函数。 IOW,作为系统的一部分具有完整性。

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

系统监控可以是生产代码。所以你编写的代码成为系统的一部分。

这件事情的好处是,你通过开发测试发展你的代码。

+0

谢谢。 Y我们的回答确实对我有帮助,特别是“系统监控可以成为生产的一部分”。这3个答案让我的发展有了很大的提高! – user89021 2010-05-04 19:30:35