Testing 设计CRUD测试套件

Testing 设计CRUD测试套件,testing,automated-tests,integration-testing,Testing,Automated Tests,Integration Testing,我正在为我们的应用程序编写一套黑盒自动测试。我不断地碰到同样的设计问题,所以我想知道这里的人是怎么想的 基本上,这是一个简单的积垢系统。为了便于讨论,让我们看看您正在测试屏幕以创建、查看、编辑和删除用户帐户。我想做的是编写一个测试,测试用户创建是否正常工作,另一个测试检查查看用户时显示的数据是否与最初键入的数据相同,另一个测试检查编辑用户是否正常工作,最后一个测试删除用户是否正常 问题是,如果我这样做,那么测试必须按一定的顺序运行,否则它们将无法工作。(例如,您不能删除尚未创建的用户。)现在有人

我正在为我们的应用程序编写一套黑盒自动测试。我不断地碰到同样的设计问题,所以我想知道这里的人是怎么想的

基本上,这是一个简单的积垢系统。为了便于讨论,让我们看看您正在测试屏幕以创建、查看、编辑和删除用户帐户。我想做的是编写一个测试,测试用户创建是否正常工作,另一个测试检查查看用户时显示的数据是否与最初键入的数据相同,另一个测试检查编辑用户是否正常工作,最后一个测试删除用户是否正常

问题是,如果我这样做,那么测试必须按一定的顺序运行,否则它们将无法工作。(例如,您不能删除尚未创建的用户。)现在有人说测试设置应该创建测试所需的所有内容,而拆卸应该将系统恢复到一致状态。但是想想看。。。创建用户测试之后将需要删除该用户,而删除用户测试必须首先创建一个用户。。。因此,这两个测试现在有相同的代码,唯一的区别是该代码是否在setup/body/teardown中。这似乎是错误的

简言之,我似乎面临着几个备选方案,所有这些方案似乎都失败了:

  • 使用安装程序创建用户,使用拆卸删除用户。这将复制所有创建用户和删除用户测试代码作为设置/拆卸代码
  • 强制测试按特定顺序运行。这违反了测试应该独立工作并且可以以任何顺序运行的原则
  • 编写一个巨大的测试,创建一个用户,查看用户,编辑用户,然后删除用户,所有这些都是一个巨大的整体块
  • 请注意,创建用户不是一件小事;这涉及到很多步骤。类似地,删除用户时,您必须指定如何处理其分配的项目等。无论如何,这不是一个简单的操作


    现在,如果这是一个白盒测试,我可以模拟用户帐户对象,或者模拟保存它们的数据库,甚至可以在磁盘上生成真实的数据库。但这些都是黑盒测试,只测试外部的、用户可见的界面。(即,单击屏幕上的按钮。)其想法是从端到端测试整个系统,而不修改它[显然,通过GUI命令除外]。

    我们也有同样的问题。我们走了两条路。在一种类型的测试中,我们按照您的建议使用设置和拆卸来创建测试所需的数据(用户、票据等)。在另一种样式中,我们使用数据库中预先存在的测试数据。因此,例如,如果测试是
    AdminShouldBeAbleToCreateUser
    ,我们不做这两项,因为这是测试本身。但是,如果测试是
    existingusershouldbeabletocket
    ,我们在测试数据中使用预定义用户,如果测试是
    usershouldbeabletoteownticket
    ,我们使用预定义用户并在设置中创建票据