用C / C ++单元测试:经验教训,记住什么?

问题描述 投票:8回答:7

用C / C ++单元测试:你教什么人谁既没有之前做单元测试或来从Java / Junit的?

什么是最重要的一课/是要记住从你的角度来看,节省了大量的时间和压力(特别是关于C / C ++)/做法?

c++ unit-testing tdd
7个回答
8
投票
  1. 单元测试必须在每张支票的自动运行(或者被写入被遗忘的单元测试都没有单元测试)。
  2. 修正一个错误之前,写一个单元测试来揭露它(应该失败)。然后修正错误,欢欣鼓舞的测试变为绿色。
  3. 这是确定的,以牺牲一点更容易测试类的“美”(如提供公共方法,不应该真的是公开的,但可以帮助您的测试/嘲讽)。

7
投票

阅读本...你会反正..


3
投票

我反对所有的这些建议自动接受友谊,测试类...

我个人更喜欢把重点放在以下让我访问类的,我需要测试的内部:

  1. 依靠类在可能的公共接口上;有时,这意味着稍微延长公众接口,以便更容易测试。不打这些扩展太多,但也不让他们驾驶您的设计太多...
  2. 考虑增加其可通过“真实”代码,以及测试的代码中使用,以使测试下的代码的监控监控接口。 (我仍然多久,这是设计过程的一个很好的部分惊讶自己)。
  3. 考虑通过“保护接口”提供给派生类访问类的一些地方和那么就可以被装备和测试问题派生类的“可测试”版本。

总之,我更喜欢看到在设计测试点,而不是一个测试类毯子友谊。当然,前者是难度比后者,但恕我直言做,产生更好的代码和更好的测试。


2
投票

我想改写ripper234,并添加一些更多的规则:

  1. 每个模块(通常DLL项目)应具有独立的UT项目。所有UT类应该是朋友,他们需要从访问私有方法/成员中的所有DLL类。
  2. 如果要更改模块 - 首先改变UT。确保DLL和它的UT编译,链接,并在检查前没有崩溃和失败的UT运行没有必要在每次检查前,运行所有UT所有模块 - 这是浪费时间。
  3. 所有UT应该是自动在每晚构建与所有DLL一起重建。所有UT和模块应编译和生成过程中的链接。
  4. 所有UT应该在晚上生成成功后自动运行,其结果值得总结。
  5. 所有UT结果汇总应张贴到开发,如果有任何故障或崩溃时,他们应该尽快纠正。

2
投票

在处理遗留代码库,没有测试的情况下,你将最有可能开始使用单元测试框架实现功能测试(如我不得不)。不要惊慌 - 你的代码是如此相互关联,这可能是不可能写出正确的单元测试。不要自满,要么 - 一旦功能测试到位,您需要重构,使真正的单元测试是可能的。您的代码会变得更好!


1
投票

一个最重要的一课:测试总比没有更好的测试。


1
投票

单元测试的情况下应该只测试一两件事。

我用C更经常看到它/ C ++相比,C#和Java是单元测试用例测试整个工作流程。

也许是因为大多数C / C ++ xUnit框架需要几个步骤来注册一个测试用例,所以诱惑只是添加几行到现有的测试用例添加一个新功能是较高时。

© www.soinside.com 2019 - 2024. All rights reserved.