Reflection 我们如何在不使用powermockito的情况下模拟私有方法

Reflection 我们如何在不使用powermockito的情况下模拟私有方法,reflection,mockito,powermock,powermockito,Reflection,Mockito,Powermock,Powermockito,我们可以在不使用powermockito的情况下模拟私有方法吗。我知道这是可能的,虽然powermockito,但我只是想与大家核实一下,是否有可能通过其他方式实现。 谢谢 -Sam根据设计,如果没有PowerMockito或类似的工具,这是不可能的 查看他们给出以下原因的地方: 它需要对从来都不是防弹的类装入器进行黑客攻击 更改API(必须使用自定义测试运行程序、注释类、, 等等) 这很容易解决-只需更改 方法从私有到包保护(或受保护) 它需要 团队需要花时间实施和维护它。但事实并非如此 在给

我们可以在不使用powermockito的情况下模拟私有方法吗。我知道这是可能的,虽然powermockito,但我只是想与大家核实一下,是否有可能通过其他方式实现。 谢谢
-Sam

根据设计,如果没有PowerMockito或类似的工具,这是不可能的

查看他们给出以下原因的地方:

  • 它需要对从来都不是防弹的类装入器进行黑客攻击 更改API(必须使用自定义测试运行程序、注释类、, 等等)

  • 这很容易解决-只需更改 方法从私有到包保护(或受保护)

  • 它需要 团队需要花时间实施和维护它。但事实并非如此 在给定的第(2)点和它已经被实现的事实下,是有意义的 在不同的工具中(powermock)

  • 最后。。。模拟私有方法是一个非常复杂的问题 提示面向对象的理解有问题。 在OO中,您希望对象(或角色)协作,而不是方法。忘记 关于pascal和过程代码。从对象中思考

  • 当然,在某些情况下,我们不可能解决这些问题,但只要退一步,然后

  • 确保您正在测试正确的东西(您是否应该测试私有方法而不是公共方法)
  • 考虑将这些方法更改为包私有,而不是依赖于PowerMock

  • 是的,我们可以为此使用Java供应商提供的反射API。

    吹毛求疵:“……没有PowerMockito”或类似的工具,这是不可能的。我想每个在受保护和私有方法上编写复杂逻辑的人最好去获取powermock或将其公开到包级别。因为简单的嘲弄不考虑是否有人将他们的逻辑隐藏在私有的和受保护的方法中。我们可以使用反射api来测试私有方法,但模拟是完全不同的!!!