将私有方法更改为受保护以进行测试

时间:2012-04-13 13:21:52

标签: java junit

将私有方法更改为受保护的JUNIT测试是否是个好主意。?

4 个答案:

答案 0 :(得分:9)

它有时很有用,是的。

如果类是可扩展的,请确保使方法最终。

另外,请记录该方法不应由同一包的子类或外部类调用。

我使用Guava @VisibleForTesting注释来明确该方法实际上应该是私有的。

答案 1 :(得分:5)

一般不是。单元测试的想法是测试......单元。或者换句话说,接口方法的实现。 如果你想测试一个你无法“看到”的方法,这可能是代码味道。也许你没有将业务逻辑与UI代码或其他东西分开。

所以最好的想法是重新思考你的架构。但是,如果替代方案是不测试您的代码,那么使这些方法受到保护是个好主意。

答案 2 :(得分:4)

您可以将方法包改为本地。

您可以使用反射调用私有方法,或者您可以决定不应直接测试private方法,只能间接测试。

答案 3 :(得分:1)

虽然您更愿意像@ user714965建议的那样重构,但PowerMock的MockPrivate可以在不打开私有方法可见性的情况下进行模拟。

首先编写测试通常会导致您不需要模拟私有方法的设计。