Java 莫基托可以';依赖于解组器的t mock类

Java 莫基托可以';依赖于解组器的t mock类,java,unit-testing,mockito,java-9,Java,Unit Testing,Mockito,Java 9,给定类Foo: public class Foo { private Unmarshaller unmarshaller; public Foo(Unmarshaller unmarshaller) {} } 以下测试失败: @Test public void test() { Foo packagingJobSource2 = mock(Foo.class); } …有错误: org.mockito.exceptions.base.MockitoException: Mock

给定类Foo:

public class Foo {
  private Unmarshaller unmarshaller;
  public Foo(Unmarshaller unmarshaller) {}
}
以下测试失败:

@Test
public void test() {
  Foo packagingJobSource2 = mock(Foo.class);
}
…有错误:

org.mockito.exceptions.base.MockitoException: 
Mockito cannot mock this class: class com.bell.cts.fonse.vod.streaming.services.adapter.cron.avcm.packagingjob.loading.xmlstorage.Foo.

Mockito can only mock non-private & non-final classes.
If you're not sure why you're getting this error, please report to the mailing list.


Java               : 9
JVM vendor name    : Oracle Corporation
JVM vendor version : 9.0.1+11
JVM name           : Java HotSpot(TM) 64-Bit Server VM
JVM version        : 9.0.1+11
JVM info           : mixed mode
OS name            : Mac OS X
OS version         : 10.13.2
我尝试使用JDK 8而不是9,效果很好。我不知道它为什么会失败,也不知道我如何才能让它成功


Unmarshaller
是一个依赖项时,该问题尤其会发生。如果您将其更改为另一种类型,如
String
,它可以工作…

可能的原因是,在类路径上编译或运行代码时会发生错误

如果您当前依赖类路径,而不是(计划)迁移到使用Java平台模块系统(JPMS),则可以使用迁移指南中规定的(1)选项,并在运行测试时向执行添加VM arg,如下所示:

--add-modules java.xml.bind

邮件上写着“如果您不确定为什么会出现此错误,请向邮件列表报告”。是你干的吗?我郑重建议您这样做。
Foo
可能不是从该模块导出的吗?这将有效地使它成为一个私有类。@DawoodibnKareem,就是这么做的!希望有人能帮助我…是的,我收到了电子邮件。我相信名单上的人会帮你的。不是我-我不知道为什么会发生这种情况。@Jeep87c只是一个旁注,您能寻找并共享用于执行测试的java命令吗?原因是
Unmarshaller
是Java9中JDK模块
@已弃用(自=“9”,forremovation=true)模块java.xml.bind
(也可升级)的一部分。也要确认感谢你把我放在正确的轨道上正确地修复它!