有时我发现自己处于这样的情况,如果我将某些方法的可见性从私有更改为私有,以便更容易进行单元测试模拟,断言……
一个例子就是这样
假设我有一个包含4个属性X,Y,Z和R的对象A,其中X,Y和Z是集合,R是每个集合的不同元素之间的关系,例如,关系将由X的元素组成, Y的元素和Z的元素.对象A不允许直接访问X,Y,Z或R,而是提供了一个丰富的API,允许您在X,Y和Z上创建新元素,也允许您将这些元素混合到新的R元素中.对于单元测试,使用公共getX(),public getY(),public getZ()和public getR()方法非常方便,因此每次调用时我都可以对对象的内部做出确切的断言对象API.但是,暴露X,Y和Z是我想要防止的,这就是为什么从非常开始的对象使这些元素变得私有,并且只使用它的API提供对它们的间接访问.然而,提供包私有方法getX(),getY(),getZ()和getR()是否有意义,以便至少形成单元测试我可以轻松检查对象的内部状态是否是预期的?
缺点当然是方法的可见性增加,并且鉴于这种方法是私有的,有充分的理由,感觉有点奇怪.
当然我可以使用反射来达到同样的效果,但感觉更脏.
所以问题是,这是一种好的还是坏的做法?这是代码味道吗?它会发生在别人身上吗?有更好的技术吗?