c++ - 你的测试应该有多详细/粒度?

标签 c++ unit-testing

关闭。这个问题是off-topic .它目前不接受答案。












想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。

9年前关闭。




Improve this question




我最近开始了一个新项目,我决定为大多数功能编写单元测试。在此之前,我的测试仅限于偶尔编写测试“功能”以确保某些功能按预期工作,然后从不费心更新测试功能,这显然不好。

现在我已经编写了大量代码和测试,我注意到我正在为我的代码编写大量测试。我的代码通常非常模块化,从某种意义上说,我尝试编写一些简单的小函数,然后根据需要将它们链接到一个更大的函数中,这也是公认的最佳实践。

但是,我现在最终为单独的“构建 block ”功能(相当小的测试)以及将它们链接在一起的功能编写测试,并在那里测试结果,显然结果会有所不同,但由于输入相似,我复制了很多测试代码(设置输入部分,每个部分略有不同,但差别不大,因为它们不相同,我不能只使用文本夹具...)。

另一个问题是我尝试非常严格地坚持每个测试只测试一件事,所以我为函数中的每个不同功能编写了一个测试,例如,如果有一些额外的输入可以传递给函数,但这是可选的,我编写了一个添加输入的版本,一个不添加并单独测试它们的版本。除了我添加的输入之外,这里的设置再次大致相同,同样不完全相同,因此使用夹具感觉不“正确”。

由于这是我的第一个项目,所有内容都经过全面单元测试,我只是想确保我做的事情正确,并且测试中的代码重复是可以预料的......所以,我的问题是:我做的事情正确吗?如果不是,我应该改变什么?

我用 C 和 C++ 编写代码。

顺便说一句,我喜欢测试本身,我现在对我的代码更有信心了。

谢谢!

最佳答案

你的问题试图解决很多问题,我只能尝试回答其中的一部分。

  • 尝试获得尽可能高的覆盖率(理想情况下为 100%)
  • 不要在单元测试中使用真正的资源,或者至少尽量避免它。您可以为此使用模拟和 stub 。
  • 不要对第 3 方库进行单元测试。
  • 您可以使用依赖注入(inject)或仿函数来打破依赖关系。这样,您的测试的大小可以减少。
  • 关于c++ - 你的测试应该有多详细/粒度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622721/

    相关文章:

    c# - 对通过 OpenXML 与 Microsoft Word 通信的应用程序进行单元测试

    c++ - 发布 boost::ptr_vector,不匹配文档

    C++析构函数删除共享内存

    python - 如何将 Firebase 与基于 Linux 的客户端应用程序一起使用,以便与服务器进行双向消息通信

    python - 测试 Django : reason for unexpected http status code

    android - 如何使用 Mockito 模拟和验证方法中的回调

    javascript - 在 JavaScript 单元测试中重用代码的最佳方法

    java - jdbc 更新查询无法使用 derby 数据库和 SpringJUnit4ClassRunner 进行单元测试

    c++ - 如何向 QTableWidget 添加复选框/单选按钮

    c++ - 用 C/C++ 编写的语法高亮库