Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何制作简洁的测试用例?_Unit Testing - Fatal编程技术网

Unit testing 如何制作简洁的测试用例?

Unit testing 如何制作简洁的测试用例?,unit-testing,Unit Testing,所以我有一个函数来分配经理和工人之间的关系。 符合以下要求。有三个角色需要登录(管理员、经理和工作人员) 在任何时候,如果经理或工作人员被禁用-抛出错误(“禁用”) 无法添加分配的工作进程-抛出错误(“拥有”) 管理员可以在遵守1的同时为任何经理向任何员工添加任何关系。二,。规则 经理只能在遵守1的情况下为自己添加工人。二,。规则 工人无法添加任何内容 这是一个非常简单的要求,但当我概述要测试的内容时,我遇到了这么多可能的测试用例,以确保完全覆盖,直到感觉多余为止。比如说, 作为管理员 将无主

所以我有一个函数来分配经理和工人之间的关系。 符合以下要求。有三个角色需要登录(管理员、经理和工作人员)

  • 在任何时候,如果经理或工作人员被禁用-抛出错误(“禁用”)
  • 无法添加分配的工作进程-抛出错误(“拥有”)
  • 管理员可以在遵守1的同时为任何经理向任何员工添加任何关系。二,。规则
  • 经理只能在遵守1的情况下为自己添加工人。二,。规则
  • 工人无法添加任何内容
  • 这是一个非常简单的要求,但当我概述要测试的内容时,我遇到了这么多可能的测试用例,以确保完全覆盖,直到感觉多余为止。比如说,

    作为管理员

    • 将无主经理分配给无主员工-成功
    • 将非自有经理分配给自有员工-失败
    • 将自有经理分配给非自有员工-成功
    • 将自有经理分配给自有员工-失败


    • 将无主管理器(已禁用)分配给无主工作人员-失败

    • 将未拥有的经理(禁用)分配给拥有的工作人员-失败
    • 将拥有的经理(已禁用)分配给未拥有的工作人员-失败
    • 将自有经理(已禁用)分配给自有员工-失败


    • 将无主经理分配给无主员工(已禁用)-失败

    • 将非自有经理分配给自有员工(已禁用)-失败
    • 将自有经理分配给无主员工(已禁用)-失败
    • 将自有经理分配给自有员工(已禁用)-失败


    • 将无主经理(禁用)分配给无主工作人员(禁用)-失败

    • 将未拥有的经理(禁用)分配给拥有的工作人员(禁用)-失败
    • 将拥有的经理(已禁用)分配给未拥有的工作人员(已禁用)-失败
    • 将自有经理(禁用)分配给自有员工(禁用)-失败
    作为经理

    • 将无主经理(自身)分配给无主员工-成功
    • 将无主经理(自我)分配给有主员工-失败
    • 将自有经理(自身)分配给非自有员工-成功
    • 将自有经理(自身)分配给自有员工-失败
    • 将无主经理(其他)分配给无主员工-失败
    • 将非自有经理(其他)分配给自有员工-失败
    • 将自有经理(其他)分配给非自有员工-失败
    • 将自有经理(其他)分配给自有员工-失败


    • 将无主管理器(自禁用)分配给无主工作人员-失败

    • 将未拥有的经理(自禁用)分配给拥有的工作人员-失败
    • 将自有管理者(自禁用)分配给非自有员工-失败
    • 将自有经理(自禁用)分配给自有员工-失败
    • 将无主管理器(其他已禁用)分配给无主工作人员-失败
    • 将未拥有的经理(其他已禁用)分配给拥有的工作人员-失败
    • 将拥有的经理(其他已禁用)分配给未拥有的工作人员-失败
    • 将自有经理(其他已禁用)分配给自有员工-失败


    • 将无主经理(自身)分配给无主员工(已禁用)-失败

    • 将无主经理(自身)分配给有主员工(禁用)-失败
    • 将自有经理(自身)分配给非自有员工(已禁用)-失败
    • 将自有经理(自身)分配给自有员工(已禁用)-失败
    • 将无主经理(其他)分配给无主员工(已禁用)-失败
    • 将非自有经理(其他)分配给自有员工(已禁用)-失败
    • 将自有经理(其他)分配给非自有员工(已禁用)-失败
    • 将自有经理(其他)分配给自有员工(已禁用)-失败


    • 将无主经理(自禁用)分配给无主工作人员(禁用)-失败

    • 将未拥有的经理(自禁用)分配给拥有的工作人员(禁用)-失败
    • 将自有经理(自禁用)分配给无主工作人员(禁用)-失败
    • 将自有经理(自禁用)分配给自有员工(禁用)-失败
    • 将无主经理(其他禁用)分配给无主工作人员(禁用)-失败
    • 将未拥有的经理(其他禁用)分配给拥有的工作人员(禁用)-失败
    • 将拥有的经理(其他禁用)分配给未拥有的工作人员(禁用)-失败
    • 将自有经理(其他禁用)分配给自有员工(禁用)-失败
    您可以看到作为工作人员登录进行测试的情况。我希望这能说明测试用例有多冗长。在这种情况下,开发人员通常做些什么来制作一个具体而简洁的测试用例

    function addUser(login, managerId, workerId) {
       if (login.accountType === "Worker" || login.accountType === "Manager" && login.Id !== managerId) {
              throw utils.permissionError;
       }
       try {
          const manager = database.one(Users.getActiveManagerById, managerId); // if no manager return method will throw error
          const worker = database.one(Users.getActiveWorkerById, workerId); // if no worker return method will throw error
          const relationship = database.one(UserRelationships.addUserRelationship, managerId, workerId);
          return "Success"
       } catch (e) { 
          return "Fail"
       }
    }
    
    更新 扩大蜂蜜的答案

    我认为应该在编写测试时不考虑函数实现,这是错误的吗?如果查看函数的代码,测试是否会偏向于实现

    我只是在想,尽管缺乏覆盖,但写得很糟糕的代码是否有可能通过所有测试。我想测试给定的任何函数,测试确保通过意味着函数完全工作

    举个例子

    测试管理权限:您不再需要考虑规则1和2

    写得不好的代码将是错误的

    if (login.accountType !== "Admin") { //test disable }
    
    然后在这种情况下,规则1和规则2没有机会生效,管理员可以指定禁用的经理或禁用的工作人员

    如果我列出所有的排列,这样无论函数是如何编写的,它都能确保所有情况都得到考虑

    许多其他要点可以被故意阻碍,但仍然可以通过。 这并不是说我想故意破坏任何代码/逻辑。我将要对代码进行大规模重构,并且我希望在重构完成后进行测试以覆盖功能

  • 如果经理或工作人员被禁用,则始终抛出错误(“禁用”)
  • 无法添加分配的工作进程-抛出错误(“拥有”)
  • 管理员可以添加任何关系