我们正在维护一些遗留代码,并为它们添加测试。
为了更容易编写测试,我们会将一些代码提取到方法中(默认情况下是私有(private)的),然后为它们编写测试。由于它们是私有(private)的,所以很难调用它们,所以我们所做的是:删除“private”关键字,将其设置为“非私有(private)”,然后编写测试。
但它使一些本应是“私有(private)”的方法成为非私有(private)的。这样做可以吗,或者有更好的解决方案吗?
更新:
我认为我最好提供更多背景信息:
代码非常复杂而且不好,而且几乎没有经过测试。为公共(public)方法编写测试是不可能的,因为它们有大量硬编码的外部依赖项并且不会被模拟。
我们需要修复一些错误,但如果没有测试我们就无法做到这一点。所以我们首先提取一些方法的相关代码,为它们添加测试,然后修复错误。
由于提取的方法默认是私有(private)的,所以我们必须将它们设为非私有(private),否则我们必须通过反射调用它们:
Method method = Somecls.class.getMethod("a-private-method");
method.setAccessible(true);
method.invoke(...)
但是如果我们将其设为非私有(private),我们就可以:
Somecls cls = new Somecls();
cls.nonPrivateMethod(...)
最佳答案
如果该方法是私有(private)的,那么它将由该类中的公共(public)方法调用。理想情况下,测试用例应该通过公共(public)方法到达该私有(private)方法中的所有可能的流程。
关于java - 仅仅为了更容易测试而将私有(private)方法变为非私有(private)方法可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20164240/