你的测试应该多详细/多细粒度
How verbose/granular should your tests be?
我最近开始了一个新项目,我决定为大多数功能编写单元测试。在此之前,我的测试仅限于偶尔编写测试"函数",以确保某些东西按预期工作,然后从不费心更新测试函数,显然不好。
现在我已经编写了相当数量的代码和测试,我注意到我正在为我的代码编写大量的测试。我的代码通常是相当模块化的,从某种意义上说,我尝试编写一些做简单事情的小函数,然后根据需要将它们链接在一起,形成一个更大的函数,这也是公认的最佳实践。但我现在最终编写测试的个人"积木"功能(非常小的测试),以及测试一起用铁链锁住他们的功能,和测试结果,显然结果将是不同的,但由于输入是相似的,我复制一个的测试代码(设置输入部分,每个但不是略有不同的,因为它们不相同的我不能使用一个文本夹具. .)。
另一个问题是,我试图严格遵守每个测试只测试一件事,所以我为函数中的每个不同功能编写一个测试,例如,如果有一些额外的输入可以传递给函数,但这是可选的,我编写一个添加输入的版本,一个不添加输入的版本,并分别测试它们。这里的设置几乎相同,除了我添加的输入,再次不完全相同,所以使用夹具感觉不"正确"。
因为这是我的第一个项目,所有的东西都经过了完全的单元测试,我只是想确保我做的事情是正确的,测试中的代码复制是预期的。所以,我的问题是:我做得对吗?如果不是,我应该改变什么?
我用C和c++写代码。
顺便说一句,我喜欢测试本身,我现在对我的代码更有信心了。
谢谢!
你的问题试图解决很多问题,我只能回答其中的一些。
- 尝试获得尽可能高的覆盖率(理想情况下是100%) 不要在单元测试中使用真正的资源,或者至少尽量避免使用。您可以使用mock和stub。不要对第三方库进行单元测试。
- 你可以使用依赖注入或函子来打破依赖。这样可以减少测试的规模。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 从父数组测试用例构造二叉树失败
- 试图对缓存进行跨步测试,但程序并没有结束
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为测试目标创建具有不同源文件夹的文件
- 当PSO细粒度策略对使用AdsGetObject MSDN API的Windows操作系统生效时,如何获取用户密码到期日
- 地图地图C++细粒度锁
- 细粒度访问说明符 c++
- C++ 中的细粒度锁定队列
- C++getter/setter、互斥、细粒度锁定
- 在linux上的c++程序中,细粒度的nanosleep不具有功率效率
- 英特尔TBB concurrent_queue是如何工作的?它是否实现了细粒度的并行性
- 你的测试应该多详细/多细粒度
- iOS 6中使用AudioFileServices的细粒度合成