![]() |
1
11
应托尔斯滕79的要求,我将详细阐述我的意见作为回答。我最初的评论是:
当你做单元测试时,你必须知道你是为你自己(或你的同事)写的,还是为其他人写的。很多时候,你应该写代码 给你的读者 而不是为了你的方便。 在我公司的硬件/软件混合开发中,客户知道他们想要什么。如果他们的现场设备在接收到某个总线命令时必须进行重置,则必须有一个单元测试来发送该命令并检查设备是否被重置。我们现在在这里用nunit作为单元测试框架,使用一些定制的软件和硬件,可以发送和接收命令(甚至按下按钮)。这很好,因为唯一的选择是手动完成所有这些工作。 客户绝对想知道有哪些测试,他甚至想自己运行这些测试。如果测试没有正确的记录,他不知道测试做了什么,也不能检查他认为他需要的所有测试是否都在那里,并且在运行测试时,他不知道它会做什么。 因为他看不懂密码。 他比我们的开发人员更了解使用过的总线系统,但他们只是无法读取代码。如果测试失败,他不知道为什么,甚至不能说出他认为测试应该做什么。这不是好事。 在正确记录了单元测试之后,我们
在这个上下文中,正确的意思是:写出非开发人员可以理解的清晰的语言。你可以保持技术性,但不要写只有你能理解的东西。当然,对于任何其他注释和代码,后者也很重要。 独立于我们的具体情况,我认为这就是我在单元测试中一直想要的,即使它们是纯软件。客户可以忽略他不关心的单元测试,比如基本功能测试。但是只要有医生就不会有伤害。 正如我在对另一个答案的评论中所写的那样:另外,如果您(或者您的老板、同事、或者测试部门)想要检查哪些测试以及它们做了什么,那么生成的文档也是一个很好的起点,因为您可以浏览它而不必深入代码。 |
![]() |
2
4
在测试代码本身中:
有测试覆盖率报告
|
![]() |
3
3
评论复杂的测试或场景(如果需要),但是 有利于可读测试 首先。 另一方面,我试着让我的测试自己说出来。换言之:
如果我要看这个测试,我会看到它是用过的人
跟随 AAA 排列、动作和断言的风格使得测试基本上是文档本身。如果这个测试更复杂,您可以在测试函数的上方添加注释,解释发生了什么。一如既往,您应该确保这些都是最新的。 作为补充说明,对测试名称使用下划线符号使它们更易于阅读,将其与以下内容进行比较:
对于较长的方法名称,这会使阅读测试更加困难。尽管这一点通常是主观的。 |
![]() |
4
1
当我回到一个旧的测试中,却不马上理解它的时候
当你写测试用例的时候,它和你写代码的时候是一样的,每件事对你来说都是非常清楚的。这使得你很难想象你应该写什么来让代码更清晰。 注意这个 不代表我从不写评论 . 在很多情况下,当我知道我将很难弄清楚一段特定的代码在做什么时。 在这种情况下,我通常从第一点开始…… |
![]() |
5
1
将单元测试改进为可执行规范是 Behaviour-Driven Development :bdd是tdd的一个演变,其中单元测试使用 Ubiquitous Language (基于业务域并由开发人员和利益相关者共享的语言)和表达性名称( 测试无法创建重复项 )描述代码应该做什么。一些BDD框架把这个想法推进了很远,并且显示了用几乎自然语言编写的可执行文件,因为 example . |
![]() |
6
0
我会反对任何 详细的 与代码分开的文档。为什么?因为当你需要它的时候,它很可能 非常 过时的。详细文档的最佳位置是代码本身(包括注释)。顺便说一句,关于一个特定的单元测试,你需要说什么 是 非常详细的文件。 关于如何实现良好的自我记录测试的几点建议:
补充其他答案:
|
|
wavesinaroom · 断言结构向量长度 5 月前 |
![]() |
Tim Kirkwood · 比较空数据帧 6 月前 |
![]() |
Kamran Khan · 使用单元测试ASP。NET核心 10 月前 |
![]() |
paymer · 为什么我的代码没有删除我的单元测试生成的zip文件? 11 月前 |
![]() |
Ricky Mo · 角度测试如何模拟导入的const 11 月前 |
![]() |
Natty · Visual Studio中缺少“代码覆盖率结果” 11 月前 |