Mockito不能依赖于Unmarshaller来模拟类[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mockito不能依赖于Unmarshaller来模拟类[重复]相关的知识,希望对你有一定的参考价值。

鉴于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它的工作原理......

答案

可能的原因是在类路径上编译或运行代码时的module java.xml.bind is not resolved by default.

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

--add-modules java.xml.bind

以上是关于Mockito不能依赖于Unmarshaller来模拟类[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Mockito不能mock final类的解决办法

Mockito简明教程

如何用mockito+spring进行单元测试

在开发中使用Mockito进行测试

Mock单元测试

优雅单测-3用Mockito轻松解决复杂的依赖问题