java – 使用包私有方法以便于单元测试是一个好习惯吗?

前端之家收集整理的这篇文章主要介绍了java – 使用包私有方法以便于单元测试是一个好习惯吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有时我发现自己处于这样的情况,如果我将某些方法的可见性从私有更改为私有,以便更容易进行单元测试模拟,断言……

一个例子就是这样

假设我有一个包含4个属性X,Y,Z和R的对象A,其中X,Y和Z是集合,R是每个集合的不同元素之间的关系,例如,关系将由X的元素组成,Y的元素和Z的元素.对象A不允许直接访问X,Z或R,而是提供了一个丰富的API,允许您在X,Y和Z上创建新元素,也允许您将这些元素混合到新的R元素中.对于单元测试,使用公共getX(),public getY(),public getZ()和public getR()方法非常方便,因此每次调用时我都可以对对象的内部做出确切的断言对象API.但是,暴露X,Y和Z是我想要防止的,这就是为什么从非常开始的对象使这些元素变得私有,并且只使用它的API提供对它们的间接访问.然而,提供包私有方法getX(),getY(),getZ()和getR()是否有意义,以便至少形成单元测试我可以轻松检查对象的内部状态是否是预期的?

缺点当然是方法的可见性增加,并且鉴于这种方法是私有的,有充分的理由,感觉有点奇怪.

当然我可以使用反射来达到同样的效果,但感觉更脏.

所以问题是,这是一种好的还是坏的做法?这是代码味道吗?它会发生在别人身上吗?有更好的技术吗?

解决方法

通常,良好的做法是不暴露内部逻辑.相反,你必须使你的类可配置.例如,如果您的类需要其他组件,例如让我们说HttpComponent等,请尝试使用不同的依赖注入技术来提供这些依赖项.然后在测试中,您可以模拟这些依赖项并验证这些模拟.

在您的情况下,它取决于上下文.大多数情况下,您将私有函数作为测试公共函数的一部分进行测试.因此,您测试不同情况下的公共行为,如果全部通过它意味着通过该公共函数调用的私有函数也可以工作.

猜你在找的Java相关文章