测试最佳实践:针对CRUD API

3
类似的问题以前已经有人回答过,但是他们并没有解决我的问题。
我正在测试一个具有创建、读取、更新和删除方法的API。最好单独测试每个函数。但是,
要测试创建,我需要读取。 要测试读取,我需要创建。 要测试更新,我需要创建和读取。 要测试删除,我需要创建!
除了这个API本身,我没有其他验证机制(例如,更低层次的API)。
在这种情况下,我应该编写一个包含所有内容的长测试吗?还是4个不同的测试;每个测试都有特殊的设置和拆卸逻辑。
谢谢
1个回答

1

这是非常主观的,但我会编写四个不同的测试,因为:

  • 更容易维护
  • 更容易找到可能的错误
  • 提高可读性

可读性

如果一个测试方法测试所有内容,你会给它起什么名字?我发现以 CreateShouldCreateARecord 的形式编写测试方法比 TestCRUD 更易于阅读。

查找错误

通过提高可读性,更容易知道哪里出了问题。对于一个庞大的方法,报告中只会显示 TestCRUD 方法失败,你需要深入查找才能发现是实现错误的读取操作。


我不喜欢写很多代码,因为需要更复杂的设置4和拆卸逻辑4。但是似乎这是确定问题的代价。例如,如果testRead失败,则我应该知道设置失败(即写入失败)或读取失败。 - Asad Iqbal
@AsadIqbal - 就像任何事情一样,总会有权衡取舍。在这种情况下和我的个人偏好中,这是值得的。 - Lieven Keersmaekers
我不太同意定位错误这部分。如果我们记得OP的问题,当我看到测试CreateShouldCreateARecord失败时,我怎么知道是创建记录出了问题,还是读取失败并给我一个错误的负面结果?最后我只能查看两个函数的代码并进行调试,而且即使这样做,我也没有获得任何收获,却需要编写更多的设置、拆除等。 - K.L.
@K.L. - 你说得对,关于 Create/Read 的问题。这不应该在两个不同的但是其他方面相同的测试用例中完成。这将把测试用例的数量从四个减少到三个,但是尝试为每个方法编写一个测试用例的意图仍然存在。 - Lieven Keersmaekers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接