单元测试是否应该包括验证?[关闭]

Should unit tests include validation? [closed]

提问人:squidword 提问时间:11/14/2023 最后编辑:Mark Seemannsquidword 更新时间:11/14/2023 访问量:30

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章用事实和引文来回答。

5天前关闭。

假设我有一个名为的对象,它公开了三种方法:、 和 。 的约定是,如果输入会导致超过 16kb,则返回 false。否则,它将返回 true 并将记录存储在文件中。但是,如果 the 为空,但 Record 大于 16kb,我们无论如何都会接受该记录(否则它永远不会被写入)。FileWriteRecordIterateGetSizeWriteRecordFileFile

假设我有一个记录为 16.1kb 的测试。在此测试中,我们调用并验证它是否返回了 true。我们是否还应该验证返回 16.1kb,以确保实际存储了此记录?我们是否也应该验证是否返回此记录?或者我们应该对同一个 16.1kb 的情况进行三个单独的测试?WriteRecordWriteRecordGetSizeWriteRecordIterate

单元测试 OOP 黑盒测试

评论


答:

1赞 Mark Seemann 11/14/2023 #1

单元测试,作为代码,就像任何其他代码一样。没有绝对的规则。相反,您应该根据给定的上下文和起作用的力量进行设计和实施。

你可能应该问的第一个问题是:为什么我们一开始就要进行测试?

在您知道该特定问题的答案之前,不可能回答 OP 中的问题。可能有很多理由不测试,就像有很多很好的理由测试一样。

是否还应验证是否返回预期大小?是的,如果你关心这一点(我想你这样做)。GetSize

您还应该检查是否返回文件吗?同样,是的,如果这是对象契约的一部分,这听起来像是一个合理的断言。Iterate

或者我们应该对同一个 16.1kb 的情况进行三个单独的测试?

考虑这是否会导致您编写重复的测试代码。如果您需要复制和粘贴大部分测试代码才能进行三个单独的测试,那么这可能不是一个好主意。另一方面,如果这三个测试用例足够不同,以至于您没有重复的测试代码,那么三个单元测试听起来是个好主意。

单元测试代码也是代码。这也是您必须维护的代码。测试代码中的代码复制会花费时间和精力,就像“生产代码”中的代码复制一样。

相应地分解测试代码。