fra*_*ast 5 c++ refactoring unit-testing
是否可以使用接口来破坏所有依赖项以使类可测试?由于许多虚拟调用而不是普通的方法调用,它在运行时会产生很大的开销.
测试驱动的开发如何在现实世界的C++应用程序中运行?我读过有效使用遗留代码并且非常有用,但是没有加快练习TDD的速度.
如果我进行重构,它经常发生,因为大量的逻辑变化,我必须完全重新进行单元测试.我的代码更改经常改变数据处理的基本逻辑.我没有看到编写单元测试的方法,这些测试不需要在大型重构中进行更改.
可能有人可以指向我使用TDD通过示例学习的开源c ++应用程序.
更新:也看到这个问题.
我只能在这里回答一些部分:
是否可以使用接口来破坏所有依赖项以使类可测试?由于许多虚拟调用而不是普通的方法调用,它在运行时会产生很大的开销.
如果你的表现会因此受到太大影响,那就没有(基准!).如果您的开发受到太多影响,请不要(估计额外的努力).从长远来看,它似乎无关紧要,有助于提高质量,是的.
您可以随时"交朋友"您的测试类,或TestAccessor对象,您的测试可以通过该对象调查其中的内容.这避免了为了测试而使一切动态可调度.(听起来确实有点工作.)
设计可测试的接口并不容易.有时你必须添加一些额外的方法来访问内部只是为了测试.这会让你感到畏缩,但这样做很好,而且这些功能在实际应用中也很常见,迟早也是如此.
如果我进行重构,它经常发生,因为大量的逻辑变化,我必须完全重新进行单元测试.我的代码更改经常改变数据处理的基本逻辑.我没有看到编写单元测试的方法,这些测试不需要在大型重构中进行更改.
通过定义的大型重构改变了很多,包括测试.很高兴你有他们,因为他们将在重构后测试东西.
如果你花费更多时间进行重构而不是制作新功能,那么在编码之前你应该考虑多考虑一下,找到能够承受更多变化的更好的接口.此外,无论您做什么,在接口稳定之前编写单元测试都是一件痛苦的事.
对于变化很大的接口,您拥有的代码越多,每次更改的代码就越多.我认为你的问题就在那里.我已经设法在大多数地方拥有足够稳定的接口,并且偶尔只重构部分.
希望能帮助到你.