回答
一类没有构造函数有一个隐含的公共的无参数的构造函数,是的,只要它不是最终的,也可以是子类。
如果类只有私有构造函数则没有,它不能。
有问题的类只有私有构造函数,包括无参数的构造函数,所以我想我只是运气不好。 – 2009-06-17 01:05:13
看起来这个类在测试方面不是非常友好。你真的应该使用接口,而不是concerete类型... – 2009-06-17 01:19:03
如果java类没有任何定义的构造函数,那么对你来说没有问题。如果类将定义任何构造函数,并且它们都将隐藏给您(私有),则问题将为此。
如果只有私有构造函数,你仍然可以使用,以便反映,以便能够从类外部访问它们。
您可以通过反射更改可见性修改器。 Here is an article listing how。
已回答问题,但要添加评论。这通常是提出将代码编写为可测试的好时机。
不要做一个关于它的痛苦,研究什么需要(可能是依赖注入至少),了解写作模拟考试,并提出一套合理的指导方针,允许类更有用。
我们只是重新写了一堆单身的使用DI,而不是因为单身是出了名的难嘲笑。
这可能不是一个好,但编码可测性的某种程度是最专业的店标。
是的,你可以嘲笑的对象,虽然它可能不能够继承它(当然不是没有得到非常亲密的类加载器,反正)。 Here是你如何使用JMock来完成的。
以这种方式嘲弄可以让你保持的类型,没有子虽然它可能会挺难不可能弄清只有某些行为。因此,此方法适用于测试使用此类的类,而不适用于测试类本身。
如果你实际上可以访问类的源代码,你可以实现一个允许你扩展它的内部类,但是如果你可以这样做的话,你也可以使其中一个构造函数也是私有的。
也有动态语言,这将允许你做的子类,并实现一个Java接口,Java代码可以交互,但我不那么熟悉的细节。
您可以模拟类,和其任何或所有构造函数,用JMockit。
这是一个Java的嘲弄工具包,它可以让你嘲笑任何事情。 即使该类不公开和/或嵌套,它仍然可以被模拟。 JMockit中有几种机制可用于此目的。工具箱发行版也包含大量的示例JUnit测试。
如果类实现了某个接口或扩展了一个抽象类,那么您可以告诉JMockit根据需要“捕获”并基本类型的模拟实现,因为它们由JVM加载,甚至将创建的实例分配给测试类中的字段。
- 1. php扩展,但有一个新的构造函数...可能吗?
- 2. java,扩展类与主类的构造函数有参数
- 3. 没有名字的Java构造函数?
- 4. 有没有可能在特质中有构造函数?
- 5. 没有构造函数的C#类
- 6. Java中扩展类的构造函数
- 7. DatabaseException:类缺少一个没有参数的构造函数
- 8. 在python中有没有可能从构造函数中调用一个classmethod?
- 9. 如何构造类的构造函数可能有多个参数或模板中没有?
- 10. 注册一个没有默认构造函数的类型
- 11. 有没有在JAVA中执行超类的构造函数之前的子类的构造函数?
- 12. cglib:没有构造函数的类的Java动态代理(HttpUrlConnection)
- 13. 匿名类型有没有参数的构造函数?
- 14. C#可能有一个抽象类中的构造函数?
- 15. 没有参数的构造函数或参数构造函数
- 16. 有一个子类的构造函数
- 17. 有没有在clojure中构造一个lambda函数?
- 18. 没有扩展
- 19. 类的构造函数不能没有“新”来调用
- 20. 类不能做没有空构造函数的序列化
- 21. 是否有可能扩展一个库类扩展MY_Controller类
- 22. Jython说“没有可见的类构造函数”
- 23. 为什么Inet * Address类没有可见的构造函数?
- 24. 是否有可能有一个构造函数的参数作为类名C++?
- 25. 没有适当的默认构造函数可用并且没有默认的构造函数
- 26. 没有空的构造函数
- 27. 没有默认的构造函数
- 28. 没有构造函数的实例C++
- 29. C++ - 没有匹配的构造函数
- 30. NHibernate映射,没有空的构造函数和没有setter
问题是,它可以被嘲笑,不可以被分类,考虑到接受的答案,也许你应该改变这个问题,如果这是你的意思? – Yishai 2009-06-17 14:38:44
我的问题明确询问可扩展性。它只提到嘲笑作为希望这种可扩展性的原因。 – 2009-06-17 18:08:53