2013-07-13 36 views
3

我正在为我们的应用程序编写一套黑盒自动测试。我一直在碰到同样的设计问题,所以我想知道这里有什么人想想它。设计CRUD测试套件

基本上,这是一个简单的CRUD系统。为了说明起见,让我们看看您正在测试屏幕以创建,查看,编辑和删除用户帐户。我会喜欢要做的就是写一个测试,测试的是用户创建工作正常,另一个测试检查,在查看用户你显示了相同的数据,您最初键入,另一个测试,检查该修改用户的作品,和最后是一个删除用户的测试。

麻烦的是,如果我这样做,那么测试必须在一定的顺序执行,否则将无法正常工作。 (例如,您无法删除尚未创建的用户。)现在有人说测试设置应创建测试需要的所有内容,拆卸应该使系统恢复到一致状态。但仔细想想......创建用户测试将需要在之后删除该用户,并且删除用户测试必须先创建一个用户...因此这两个测试现在具有相同的代码,唯一的区别是无论该代码是在安装/正文/拆解中。这似乎错误

总之,我似乎面临着几种选择,所有这一切似乎打破:

  1. 使用安装程序创建用户和拆卸将其删除。这将所有创建用户和删除用户测试代码复制为安装/拆卸代码。
  2. 强制测试以特定顺序运行。这违反了测试应该单独运行并且可以以任何顺序运行的原则。
  3. 写一个巨头测试,创建用户,查看用户,编辑用户,然后删除该用户,都为一个巨大的整块。

注意,创建用户是不是一件小事;涉及的步骤很多。同样,当删除一个用户时,你必须指定如何处理他们指定的项目等等。这不是一个微不足道的操作。

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

回答

3

我们有同样的问题。我们走了两条路。在一种测试风格中,我们使用建议和拆卸来建立测试需要的数据(用户,门票等)。在另一种风格中,我们使用数据库中预先存在的测试数据。因此,例如,如果测试是AdminShouldBeAbleToCreateUser,那么我们就不会这样做,因为那是测试本身。但是如果测试是ExistingUserShouldBeAbleToCreateTicket,我们在测试数据中使用预定义的用户,如果测试是UserShouldBeAbleToDeleteOwnTicket,我们使用预定义的用户并在设置中创建票证。