相关疑难解决方法(0)

单元测试值得付出努力吗?

我正在努力将单元测试集成到我工作的团队的开发过程中,并且有一些怀疑论者.有什么好的方法可以让团队中持怀疑态度的开发人员相信单元测试的价值?在我的具体情况下,我们将添加单元测试,因为我们添加功能或修复了错误.不幸的是,我们的代码库不适合简单的测试.

unit-testing

573
推荐指数
22
解决办法
27万
查看次数

如何将单元测试引入大型遗留(C/C++)代码库?

我们有一个用C语言编写的大型多平台应用程序(只有少量但不断增长的C++)多年来,它已经发展了许多你期望在大型C/C++应用程序中使用的功能:

  • #ifdef 地狱
  • 大文件使得难以隔离可测试代码
  • 功能过于复杂,无法轻松测试

由于此代码是针对嵌入式设备的,因此在实际目标上运行它需要大量开销.因此,我们希望在本地系统上以快速周期进行更多的开发和测试.但我们希望避免"在您的系统上复制/粘贴到.c文件,修复错误,复制/粘贴"的经典策略.如果开发人员要麻烦这样做,我们希望以后能够重新创建相同的测试,并以自动方式运行.

这是我们的问题:为了使代码重构更加模块化,我们需要它更易于测试.但是为了引入自动化单元测试,我们需要它更加模块化.

一个问题是,由于我们的文件太大,我们可能在文件中有一个函数调用一个文件中的函数,我们需要将它们存根以进行良好的单元测试.看起来这不是一个问题,因为我们的代码变得更加模块化,但这还有很长的路要走.

我们想到的一件事是用注释标记"已知可测试"的源代码.然后我们可以为可测试代码编写脚本扫描源文件,将其编译在单独的文件中,并将其与单元测试链接.我们可以在修复缺陷和添加更多功能时慢慢引入单元测试.

但是,有人担心维护这个方案(以及所有必需的存根函数)将变得太麻烦,开发人员将停止维护单元测试.所以另一种方法是使用一个工具,为所有代码自动生成存根,并将文件链接到该工具.(我们发现这样做的唯一工具是昂贵的商业产品)但是这种方法似乎要求我们所有的代码在我们开始之前都要更加模块化,因为只有外部调用可以被删除.

就个人而言,我宁愿让开发人员考虑他们的外部依赖关系并智能地编写他们自己的存根.但是,对于一个可怕的过度生长的10000行文件来说,这可能是压倒性的.可能很难说服开发人员他们需要为所有外部依赖项维护存根,但这是正确的方法吗?(我听到的另一个论点是子系统的维护者应该维护子系统的存根.但是我想知道"强迫"开发人员编写自己的存根会导致更好的单元测试吗?)

#ifdefs,当然,再添全尺寸的问题.

我们已经研究了几个基于C/C++的单元测试框架,并且有很多选项看起来很好.但是我们还没有找到任何方法来缓解从"没有单元测试的代码毛球"到"单元可测试代码"的过渡.

所以这是我对其他任何经历过这个问题的人的问题:

  • 什么是一个好的起点?我们是朝着正确的方向前进,还是我们错过了一些明显的东西?
  • 哪些工具可能有助于过渡?(最好是免费/开源,因为我们现在的预算大致为"零")

注意,我们的构建环境基于Linux/UNIX,因此我们不能使用任何仅限Windows的工具.

c c++ unix legacy unit-testing

73
推荐指数
6
解决办法
1万
查看次数

在有限时间内对工作代码库进行单元测试:如何?

我有几个中型Rails应用程序,我经常工作,只有其中一个有任何单元测试.但我已经看到了光明,我想要改变所有这些,除了......我没有时间进入并开始逐类编写测试或类似的东西.

你如何开始在有限的时间内在现有的和工作的代码库上编写单元测试?例如,由于任何方法都必须是增量的,您如何订购单元测试?从肤浅的测试开始,然后继续进行更多的覆盖,或仅涵盖几个类......等等.

注意:我正在考虑这个问题考虑Rails,但我真的很感兴趣它适用于任何语言.

编辑:注意,这个问题与其他问题不一样.另一个人问这有多难,结果值得.我问的是如何添加单元测试.

tdd unit-testing

9
推荐指数
3
解决办法
349
查看次数

为现有应用程序编写测试用例(Rspec)

作为Rspec noob,我不知道这个问题是有道理的.我真的很困惑,无法得到解决方案.

我们有一个新要求,要求我们为现有项目编写Rspec测试用例.他们有应用rails3已经工作,但他们希望现在写入rspec案例

我的问题是

为现有应用程序编写Rspec案例确实有意义吗?

我们可以为已经工作的项目编写规范吗?

我们是否应遵循任何指导方针为已编写的应用编写规范

谢谢

tdd rspec ruby-on-rails ruby-on-rails-3

6
推荐指数
2
解决办法
2309
查看次数

标签 统计

unit-testing ×3

tdd ×2

c ×1

c++ ×1

legacy ×1

rspec ×1

ruby-on-rails ×1

ruby-on-rails-3 ×1

unix ×1