更新:见this question too.
我只能在这里回答一些部分:
是好的,打破使用接口的所有相关性只是为了一类可测试?由于许多虚拟调用而不是普通方法调用,因此它在运行时会涉及大量开销。
如果你的表现会受太大的缘故吧,没有(基准!)。如果你的发展受到太多影响,否(估计额外的努力)。如果它看起来不会有太大影响,并且从长远来看有所帮助,并帮助您提高质量,是的。
你总是可以'测试'你的测试类,或者一个TestAccessor对象,通过它你的测试可以调查其中的东西。这避免了为了测试而动态分配所有内容。 (它的确听起来很不错)
设计可测试的接口并不容易。有时你必须添加一些额外的方法来访问内部进行测试。它会让你感到畏缩,但它有好处,而且往往不是那些函数在实际应用中有用,迟早也会如此。
如果我做了重构,它经常发生,因为大规模的逻辑改变,我必须完全重新进行单元测试。我的代码更改经常会改变数据处理的基本逻辑。我没有看到编写单元测试的方式,在大型重构中不必改变。
defintion的大型重构变化很大,包括测试。很高兴你有他们,因为他们也会在重构之后测试一些东西。
如果您花费更多的时间重构比创建新功能,也许您应该考虑在编码之前多思考一下,以便找到能够承受更多变化的更好的界面。另外,在接口稳定之前编写单元测试是一件痛苦的事情,不管你做什么。
对接口变化很大的代码越多,每次更改的代码越多。我认为你的问题在于此。我已经在大部分地方设置了足够稳定的接口,并且不时重构部分。
希望它有帮助。
这不是我编码之前不认为的。在客户看到新功能的初始实现后,需求常常会发生变化。另一个原因是,出于市场营销的原因,做一个快速和肮脏的实施有时是不切实际的。在这种情况下,我不打算进行单元测试,但有时由于紧张的调节,有时候快速和肮脏的黑客变成了真实的东西。以后再做这个烂摊子测试并不容易。 – frast 2009-06-29 22:18:00