Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon PowerMock的Whitebox和Mockito的Whitebox之间的主要区别是什么


PowerMock的Whitebox和Mockito的Whitebox之间的主要区别是什么


PowerMock的WhiteBox和Mockito的Whitebox既是用于访问和操纵类的内部状态的实用程序类,但是它们的起源,功能和用法上下文都有明显的差异。

##来源和可用性

- Mockito的Whitebox:这是Mockito中的一个内部类,允许用户设置对象的内部状态。但是,由于担心促进不良测试实践的担忧,并且由于它不打算公开使用,因此将其从Mockito 2.x中删除[11]。鼓励依靠它的用户改用诸如PowerMock的WhiteBox之类的替代方案或实施自己的反射实用程序[3]。

- PowerMock的WhiteBox:这是PowerMock库的一部分,该库通过允许私有,静态和最终方法的嘲笑以及其他功能来扩展Mockito的功能[5]。 PowerMock的WhiteBox提供了一个简化的反射实用程序,旨在用于测试,使私人成员访问并调用私人方法[2] [6]。

##功能

- Mockito的WhiteBox(历史):在删除其摩擦式的白框之前,用户可以使用诸如setInternalState”之类的方法设置对象的内部状态。这对于在没有公共设置的情况下将模拟注入课堂很有用。

- PowerMock的WhiteBox:提供更广泛的功能,包括:
- 访问私人成员:诸如`getInternalState'之类的方法允许检索私人字段值。
- 调用私有方法:“ InvokeMethod”方法可以调用私有方法,包括静态方法[4] [10]。
- 设置私有字段:虽然未明确记录,但PowerMock的Whitebox可用于通过反射设置私有字段,尽管这不是其主要目的。

##用法上下文

- Mockito的WhiteBox:由于Mockito 2.X不再可用,因此建议用户使用PowerMock的Whitebox或Spring的“ ReflectionTestutils”等替代方案,如果适用[1] [3]。

- PowerMock的WhiteBox:通常在需要直接访问私人成员或方法的情况下使用,通常是在旧版代码中或测试无法轻易重构的复杂逻辑时。但是,通常建议除非绝对必要,否则通常建议避免使用此类实用程序,因为它们可以绕过封装并导致脆弱的测试[10]。

总而言之,尽管两个白盒公用事业都有相似的目的,但PowerMock的版本更加全面且广泛可用,而莫科托的版本由于对测试实践的疑虑而被删除。 PowerMock的WhiteBox是一种强大的工具,用于访问和操纵内部阶级状态,但应明智地使用。

引用:
[1] https://stackoverflow.com/questions/40280918/what-do-i-i-i-i-i-i-i-is-instead-of-white-whitebox-inbox-in-mockito-2-2-2-t-to-set场
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/reflect/whitebox.html
[3] https://proandroiddev.com/mockito-2-x-x-over-powermock migration-tips-tips-and-tricks-top-top-top-top-teN-118c52abd1d8
[4] https://johnmullins.co
[5] https://www.calsoftinc.com/blogs/unit-testing-mockito-powermockito.html
[6] https://www.javadoc.io/doc/org.powermock/powermock-reflect/latest/org/powermock/reflect/reflect/whitebox.html
[7] https://github.com/mockito/mockito/issues/422
[8] https://www.alibabacloud.com/blog/598057
[9] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.reflect.white.whitebox
[10] https://github.com/powermock/powermock/wiki/bypass-encapsulation
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-for-powermock/