Unit testing 如何制作简洁的测试用例?
所以我有一个函数来分配经理和工人之间的关系。 符合以下要求。有三个角色需要登录(管理员、经理和工作人员)Unit testing 如何制作简洁的测试用例?,unit-testing,Unit Testing,所以我有一个函数来分配经理和工人之间的关系。 符合以下要求。有三个角色需要登录(管理员、经理和工作人员) 在任何时候,如果经理或工作人员被禁用-抛出错误(“禁用”) 无法添加分配的工作进程-抛出错误(“拥有”) 管理员可以在遵守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没有机会生效,管理员可以指定禁用的经理或禁用的工作人员
如果我列出所有的排列,这样无论函数是如何编写的,它都能确保所有情况都得到考虑
许多其他要点可以被故意阻碍,但仍然可以通过。
这并不是说我想故意破坏任何代码/逻辑。我将要对代码进行大规模重构,并且我希望在重构完成后进行测试以覆盖功能