我正在Java中实现一个模型,它需要对集合进行迭代并经历多个标识阶段,它涉及到循环,while循环等。这是我想要的东西在细粒度级别进行测试,以便我相信它已正确实施。单元测试,静态和工厂
我已经使用它作为开始单元测试的机会,因为它是我认识到有益于我的代码的东西。自那以后,我一直在阅读丛书,以加快JUnit和单元测试的速度。
基本上我的问题可以归结为两个相互矛盾的建议件我收到:
1)静是邪恶的。不要碰静电。不要测试私人,你可能想要在那里上课。
2)使用工厂创建允许使用参数进行依赖注入 - 可能允许使用模拟和存根进行隔离。
在我的例子我期待执行沿行的操作:
double height = 223.42; // this was set iterating over a collection of doubles
//blah
HeightBounds b = HeightBounds.getHeightBounds(height);
//more blah
为了避免建立什么将成为一个非常漫长而复杂的代码块,我已经这样做了,我只能整体测试。通过这种方式,我可以测试公共可访问对象,以确保系统组件全部正确执行。
常识对我说,静态工厂没有错,而且他们很容易测试,但是我错过了一些盲目明显的东西,因为我正在学习测试驱动设计?
谢谢
你应该单元测试每种测试有意义的方法,这包括静态方法。 – DwB 2011-04-12 15:17:27
“statics is evil”有可能主要针对静态_variables_,因为它们在测试之间保留它们的值,因此如果测试没有正确重置,可能会导致测试之间的依赖关系。在我看来,不接触静态变量的静态_methods_没有问题。 – 2011-04-12 15:19:59
问题是我可以在类中作为静态方法调用来进行边界检查,但它会非常程序化,我不想将它列在公共接口中。我可以在不改变可见性的情况下测试静态方法的一种方法是扩展类以进行测试并制作方法来调用它们,但是我读到的所有内容都是“静态方法是代码味道”,您应该使用类。鉴于我在嵌入式环境中运行,尽管我更喜欢避免创建对象的想法,而不是完美的OO设计......仍在审议! – Uniqe 2011-04-12 15:26:05