是否可以模拟Java协议缓冲区消息?
协议缓冲区类标记为是否可以模拟Java协议缓冲区消息?,java,mocking,protocol-buffers,Java,Mocking,Protocol Buffers,协议缓冲区类标记为final,可能是为了提高效率;然而,这使得它们很难测试——不能模拟/监视最终类。我尝试过使用PowerMockito,但没有成功:在为测试准备final类时,我遇到了ClassFormatError 到目前为止,我的解决方案是创建可模拟的适配器接口,但我希望有一种不那么费力的方法 它不能取消从引导类加载器加载的类的结束,并且在启动测试时需要一个VM参数。可以处理最终的和静态的。只需注意如何设置它,因为它需要-javaagent JVM参数,或者类路径调整,或者额外的注释来模拟
final
,可能是为了提高效率;然而,这使得它们很难测试——不能模拟/监视最终类。我尝试过使用PowerMockito
,但没有成功:在为测试准备final
类时,我遇到了ClassFormatError
到目前为止,我的解决方案是创建可模拟的适配器接口,但我希望有一种不那么费力的方法
它不能取消从引导类加载器加载的类的结束,并且在启动测试时需要一个VM参数。可以处理
最终的和静态的。只需注意如何设置它,因为它需要-javaagent JVM参数,或者类路径调整,或者额外的注释来模拟final
和static
内容。我不明白为什么需要模拟protobuf消息类。如果您需要在测试中使用一个,只需以正常方式创建它。如果要模拟服务,可以只模拟ServiceClass.Interface。@杰夫:这是一个很好的观点,使用一些简单的值在许多情况下都会起作用——我希望使用RETURNS\u MOCKS功能来避免生成更复杂的消息,并验证消息的某些部分是否已被读取。我将尝试下面提到的其他模拟框架,看看它们是如何运行的。@geoffreedy,但是。。。。。以通常的方式创建类会将我的单元测试变成集成测试。:'(JMockit无法使用java.lang.ExceptionInitializeError模拟它们。您是否尝试了所有javaagent重新定义的内容?如果您尝试模拟系统/核心java类,则需要重写JVM引导类路径。可能您的测试缺少注释?抱歉,我帮不上什么忙。我不熟悉您尝试模拟的类或实际上,让JMockit测试工作起来应该很容易:要么添加-javaagent:/JMockit.jar
作为JVM启动参数,要么在junit-xyz.jar之前添加JMockit.jar,如果使用JDK1.6,则将其添加到类路径中。如果仍然失败,请在JMockit用户讨论组中发布您的具体问题。