-
的可能副本 针对未来变化进行设计或解决手头的问题 – 蚊虫 评论 2013年9月23日11:09 -
三 亲吻 -永远是最好的方法。 – 反应型 评论 2013年9月23日13:12 -
5 在我看来,这个问题比拟议的副本更具体。 面向未来的设计变革或解决问题 ,因此我投票赞成 不关闭此 – k3b型 评论 2013年9月23日14:58 -
1 可测试性还不够充分吗? – 空调器 评论 2013年9月23日15:53 -
与其说是重复,不如说是回答本身。 如果它永远不会发生,那么为它而设计就不是为未来的变化而设计。 即使是建筑航天员也只会设计出不会因错误判断而发生的变化。 – 用户8709 评论 2013年9月23日16:12
8个答案
不要修改你的设计 只是 测试性。 单元测试是为您服务的,而不是为您服务。 不要重复。 制作一个只有一个继承者的接口是没有用的。 如果一个类是不可测试的,那么它对于实际用例也可能不灵活/不可扩展。 有时这很好——您不太可能需要这种灵活性,但简单性/可靠性/可维护性/性能/其他更重要。 如果您不知道,请编写接口代码。 需求变更。
-
12 -
6 @docBrown——(和其他人)我确实与许多人,甚至大多数人不同~ 95%的情况下,使事物具有可测试性也会使其具有灵活性或可扩展性。 你应该把它放在你的设计中(或者把它添加到你的设计中) 最 时间的可测试性是该死的。 另外约5%的人要么有奇怪的需求,阻止了这种灵活性,转而支持其他东西,要么是如此重要/不变,以至于即使没有专门的测试,你也会很快发现它是否损坏。 – 特拉斯坦 评论 2013年9月23日12:51 -
4 -
1 -
2 @卡普坦&因为具体对象可以像合同一样工作。 做两个就意味着你需要 写两次代码 (并在代码更改时修改两次)。 当然,绝大多数接口都有多个(非测试)实现,或者您需要为这种情况做好准备。 但在这种罕见的情况下,您只需要一个简单的密封对象,只需直接使用即可。 – 特拉斯坦 评论 2013年9月23日19:06
我们有理由避免编程到接口吗?
-
2 -
4 -
1 -
@史蒂文·埃弗斯:我认为使用YAGNI来证明忽略依赖项反转原则是正确的,这样可以避免对YAGNI或DIP甚至编程和推理的一些更基本的原则缺乏理解。 只有在以下情况下,才应忽略DIP 需要 在这种情况下,YAGNI从本质上来说根本不适用。 评论 2013年9月24日10:50 -
@back2dos:假设DI是有用的,因为“可能需要”和“谁知道?”正是YAGNI打算与之抗争的思路,相反,您将其用作额外工具和基础设施的理由。 – 史蒂文·埃弗斯 评论 2013年9月24日17:17
我相信测试本身就是一个很好的理由 对象所需的类可能在其他地方使用-如果您注入它们,它将使您能够共享资源(例如,如果所讨论的类是线程或数据库连接-您不希望每个类都创建新的连接) 如果初始化其他对象可能会失败,那么堆栈上的代码可能比类更适合处理问题,而类可能会简单地转发错误
-
三 我认为不应该测试私有方法的流行观点与测试它们的困难无关。 如果私有方法中有一个bug,但它没有影响对象的行为,那么它不会影响任何东西。 如果私有方法中有一个错误确实影响了对象的行为,那么至少有一个对象的公共方法的测试失败或缺失。 – 迈克尔·肖 评论 2013年9月23日18:37 -
归根结底,这取决于你是在测试行为还是状态。 显然,私有方法需要以某种方式进行测试,但如果你是一个典型的TDD人员,你将通过测试类“作为一个整体”来测试它们,大多数人使用的测试工具专注于单独测试每个方法。。。 我的观点是,后者实际上没有正确测试,因为他们错过了执行完整测试的机会。 所以我同意你的观点,同时试图强调TDD是如何被今天一些(大多数?)人如何进行单元测试所颠覆的。 评论 2013年9月24日8:17