Testing 设计CRUD测试套件
我正在为我们的应用程序编写一套黑盒自动测试。我不断地碰到同样的设计问题,所以我想知道这里的人是怎么想的 基本上,这是一个简单的积垢系统。为了便于讨论,让我们看看您正在测试屏幕以创建、查看、编辑和删除用户帐户。我想做的是编写一个测试,测试用户创建是否正常工作,另一个测试检查查看用户时显示的数据是否与最初键入的数据相同,另一个测试检查编辑用户是否正常工作,最后一个测试删除用户是否正常 问题是,如果我这样做,那么测试必须按一定的顺序运行,否则它们将无法工作。(例如,您不能删除尚未创建的用户。)现在有人说测试设置应该创建测试所需的所有内容,而拆卸应该将系统恢复到一致状态。但是想想看。。。创建用户测试之后将需要删除该用户,而删除用户测试必须首先创建一个用户。。。因此,这两个测试现在有相同的代码,唯一的区别是该代码是否在setup/body/teardown中。这似乎是错误的 简言之,我似乎面临着几个备选方案,所有这些方案似乎都失败了:Testing 设计CRUD测试套件,testing,automated-tests,integration-testing,Testing,Automated Tests,Integration Testing,我正在为我们的应用程序编写一套黑盒自动测试。我不断地碰到同样的设计问题,所以我想知道这里的人是怎么想的 基本上,这是一个简单的积垢系统。为了便于讨论,让我们看看您正在测试屏幕以创建、查看、编辑和删除用户帐户。我想做的是编写一个测试,测试用户创建是否正常工作,另一个测试检查查看用户时显示的数据是否与最初键入的数据相同,另一个测试检查编辑用户是否正常工作,最后一个测试删除用户是否正常 问题是,如果我这样做,那么测试必须按一定的顺序运行,否则它们将无法工作。(例如,您不能删除尚未创建的用户。)现在有人
现在,如果这是一个白盒测试,我可以模拟用户帐户对象,或者模拟保存它们的数据库,甚至可以在磁盘上生成真实的数据库。但这些都是黑盒测试,只测试外部的、用户可见的界面。(即,单击屏幕上的按钮。)其想法是从端到端测试整个系统,而不修改它[显然,通过GUI命令除外]。我们也有同样的问题。我们走了两条路。在一种类型的测试中,我们按照您的建议使用设置和拆卸来创建测试所需的数据(用户、票据等)。在另一种样式中,我们使用数据库中预先存在的测试数据。因此,例如,如果测试是
AdminShouldBeAbleToCreateUser
,我们不做这两项,因为这是测试本身。但是,如果测试是existingusershouldbeabletocket
,我们在测试数据中使用预定义用户,如果测试是usershouldbeabletoteownticket
,我们使用预定义用户并在设置中创建票据