为什么说private方法是有罪的】的更多相关文章

具体的这句话从什么地方获得,我已经无从考证了,但是想想我们现在使用private的场景,你慢慢的就会发现,private的方法,大多数都是copy代码,当然我只是说大多数,还有就是大多数private方法实际上是设计的不太合理的遗留物.我先说两个我应用的场景,第一种场景与设计没有关系,只是与维护系统有关系. 第一种场景:维护系统,扩展系统 不知道大家有没有这种场景,需要维护或者扩展一个系统,这个时候,你只能通过继承某个类来做事情,不能通过修改source来达到目的,而这个时候,你会发现,你真正需…
在实际的工作中,经常碰到只需要mock一个类的一部分方法,这时候可以用spy来实现. 被测类: public class EmployeeService { public boolean exist(String userName) { checkPrivateExist(userName); checkPublicExist(userName); return true; } private void checkPrivateExist(String userName) { throw new…
最近重温了<Thinking in Java>,发现了一个让我为之兴奋的知识漏洞,必须得分享一下. 上一篇的<Java类初始化的过程>的随笔中,那个初始化顺序并不完整.初始化的实际过程是: 在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制的0: 如上一篇的<Java类初始化的过程>那样:父类的static成员变量和方法-->该类的static变量和方法-->开始实例化-->父类的普通成员变量和方法-->父类的构造方法-->该类的…
这里首先有一个问题要考虑的是,这类方法是否要被测试? 理论上,这类方法都会被其它public类型的方法调用,只要对那些public的方法做充分的测试,就可以保证这些方法的可靠性,就没有必要再测了.好像是有道理的. 我们先看看好的单元测试的原则:(ATRIP) 自动化(Automatic) 彻底(Thorough ) 可重复(Repeatable) 独立(Independent ) 专业(Professional) 对于测试private/protected方法来说,有另外三个附加原则: 透明(T…
我需要测试的方法是 public 方法: public ResponseResult subscribe(SysSubscription sysSubscription) throws JsonGenerationException, JsonMappingException, IOException { LOGGER.debug("=====================subscribe Subscription======================="); Respons…
上周在修复bug时,发现Java类中某方法是private,且类中没有用到,第一感觉是方法多余.其实通过分析,发现原来Native Code会通过JNI调到此方法.这也给自己启发,平时做Code refine时,如果方法没有被直接调用,一定要注意是否会有反射会调用到等,否则移除后,编译通过,但会有问题-   虽然是小语法点,但很感兴趣,而且易被忽略.这两天查了一些资料,分享下   一. Native Code调用Java类中private方法​ 例如JNI开发中,C可以反射调到Java的方法,例…
利用反射编写私有 Private 方法的单元测试 最近在添加一个新feature时,鉴于要给自己的代码一是增加代码的强壮性,二是增加代码测试的覆盖率.但是遇到了有些方法是 Private 的,但是在调用这个私有方法的方法里面已经写过测试了.代码就像下面这样: namespace Test { class HttpTest { public HttpResponse GetHttpResponse(HttpRequest request) { ... GetPrivateValue(request…
父类中的final  private方法不能被继承,父类中的static方法可以被继承,但是不能重写,这三者都属于前期绑定,java中除了这三种以及构造方法之外剩下的都是后期绑定(运行是绑定). 当父类的引用指向子类时,调用静态方法看引用,调用普通方法看对象. 静态的方法可以被继承,但是不能重写.如果父类中有一个静态的方法,子类也有一个与其方法名,参数类型,参数个数都一样的方法,并且也有static关键字修饰,那么该子类的方法会把原来继承过来的父类的方法隐藏,而不是重写.通俗的讲就是父类的方法和…
前言: 在博客开始之前,我们先讨论一下是否应该对private方法做测试,通常有两种观点: private方法应该被测试: private方法不应该被测试: 我们以下面的代码为例子来进行说明: public class Salary { public int Calcuate(int bs, int nwd) { int ts; if(IsValidNwd(nwd)) { ts = bs * nwd; } else { ts = 1000; } return ts; } private bool…
1.思考,对于C++,能不能在外部调用私有方法? 2.在Java中,子类继承不能缩小父类成员的访问权限.因为在Java中,继承只是表示Is-A关系,因此,父类提供的接口,子类必须承诺仍然提供,不能缩小访问权限,但是可以放大权限. 3.在C++中,继承不光表示Is-A关系,还可以表示根据某物实现出.因此,在C++中,子类可以放大或者缩小父类成员的访问权限.考虑,如果父类提供public virtual方法,子类重写为private virtual方法,我们知道,重写只不过是,子类整体拷贝父类的虚方…