Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以模拟Java协议缓冲区消息?_Java_Mocking_Protocol Buffers - Fatal编程技术网

是否可以模拟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用户讨论组中发布您的具体问题。