我相信你知道强烈建议不要模拟值,但是对于遗留的东西可能会有时髦的东西。
无论如何,以下声明可能会起到很大的作用:
mock(Report.class, RETURNS_DEEP_STUBS)
但是,您似乎在您的聚合中有集合report.getReportSides().get(0).getSideGroup().get(1)
,并且由于类型泛型擦除 Mockito 或其他框架无法推断应该在集合中的运行时类型,因此RETURNS_DEEP_STUBS
answer 将创建一个与通过反射读取的返回类型匹配的模拟,并将Object
在 java 集合的情况下,当然是自己的模拟。所以你必须手动处理它。
附带说明一下,mockito 主干中的泛型类型已经取得了进展,它可以检索嵌入在类中的更多泛型信息,它显然不接近任何具有运行时自省的东西(对于当前版本的 Java 是不可能的),但它更接近给它。升级后RETURNS_DEEP_STUBS
,您可以执行以下操作:
public interface A<K extends MyKeyType> extends Map<K, MyValueType> {}
deepStubMock.entrySet().iterator().next()
.getValue().someValueTypeMethod().eventuallyFollowedByAnotherMethod();
编辑:看起来大卫在评论中回答了我之前的问题:)