Automated integration testing a C++ app with a database我将自动集成测试引入到一个成熟的应用程序中,该应用程序直到现在还只是通过手动测试。 该应用程序基于Windows,可与MySQL数据库对话。 在将要发生的数据库事务方面,使测试彼此独立的最佳方法(包括所有推荐工具的详细信息)是什么? (不允许为此目的修改应用程序源。) 您如何验证结果? 如果您需要查询数据库(听起来可能您确实需要这样做),那么我同意Kris K的观点,只是我会尽力在每个测试用例(而不仅仅是每个套件)之后重建数据库。 这有助于避免危险的交互测试 至于工具,我建议使用CppUnit。您实际上并没有进行单元测试,但是没关系,因为xUnit框架应该为您提供自动设置测试夹具所需的设置和拆卸框架。 显然,这可能会导致测试运行缓慢,具体取决于您的数据库大小,数量等。您可能能够附加/分离数据库,而不是删除/重建数据库。 如果您有兴趣进一步研究,请查看XUnit测试模式。对于这类事情,这是一本好书和一个很好的网站。 并感谢自动化:) 缺口 我曾经在数据库相关的单元测试类的SetUp函数中还原数据库。这样可以确保每个测试在相同条件下运行。 您可以考虑为测试准备特殊的数据库内容,即数据少于当前生产版本(以使恢复时间合理)。 您可以转储/还原每个测试套件的数据库,等等。由于您是自动执行此操作,因此可能是设置/拆卸功能中的某些功能。 正如@Kris K.所说,在每个测试之间转储和还原数据库可能是解决之道。 由于您正在考虑在App外部进行测试,因此我希望以一种可以构建更好的测试工具的语言来构建测试框架。 如果您使用Java构建测试框架,则可以利用JUnit,甚至还可以利用FitNesse之类的工具。 不要以为仅仅因为被测应用程序是C ++,就意味着您无法使用C ++进行自动化测试。 我相信,进行此类测试的最佳环境是VMWare或同等产品。设置数据库,事务日志等,然后记录整个批次-数据库以及配置。然后要重新测试,请重新加载映像和数据库并开始测试。这仍然需要在系统更改时维护测试,但是至少测试是可重复的,这是集成测试中最大的挑战之一。 对于测试自动化,许多人使用Perl,但是我们发现Perl程序像Topsy一样增长并变得令人费解。如果您要构建一系列结构化测试,那么将Python作为脚本语言(我们运行C ++测试)是值得的。 请尝试AnyDbTest,我认为这是您正在找到的工具。 (www.anydbtest.com)。 特征:
|