使用任何Java模拟框架模拟聚合
是否有任何模拟框架可以对聚合中的每个孩子进行“完全”模拟?比如说使用任何Java模拟框架模拟聚合,java,testing,mockito,easymock,powermock,Java,Testing,Mockito,Easymock,Powermock,是否有任何模拟框架可以对聚合中的每个孩子进行“完全”模拟?比如说 final Report report = createMock(Report.class); expect(report.getReportSides().get(0).getSideGroup().get(1)).andStubReturn(createSomething()); 在我开始编写一些大规模的测试代码之前,我希望这个带有这些索引的调用可以被模拟,而不需要我做任何其他事情。。。在任何框架中,EasyMock、Pow
final Report report = createMock(Report.class);
expect(report.getReportSides().get(0).getSideGroup().get(1)).andStubReturn(createSomething());
在我开始编写一些大规模的测试代码之前,我希望这个带有这些索引的调用可以被模拟,而不需要我做任何其他事情。。。在任何框架中,EasyMock、PowerMock、Mockito等都可以这样做吗
(类示例是从客户XML自动生成的遗留类,因此类结构怪异,并且没有域服务层)。我确信您知道强烈建议不要模拟值,但是对于遗留类,可能会有一些古怪的东西 无论如何,以下声明可能会完成大部分工作:
mock(Report.class, RETURNS_DEEP_STUBS)
但是,您的聚合中似乎有集合report.getReportSides().get(0).getSideGroup().get(1)
,并且由于类型泛型的原因,erasure Mockito或其他框架无法推断应该在集合中的运行时类型,因此,RETURNS\u DEEP\u STUBS
answer将创建一个与通过反射读取的返回类型相匹配的模拟,并且在java集合中肯定是对对象本身的模拟。因此,您必须手动处理它
作为旁注,mockito trunk中的泛型类型已经取得了进展,它可以检索嵌入到类中的更多泛型信息,它显然不接近任何具有运行时内省(对于当前版本的Java来说是不可能的),但它离它越来越近了。
升级后的返回\u DEEP\u存根
可以执行以下操作:
public interface A<K extends MyKeyType> extends Map<K, MyValueType> {}
deepStubMock.entrySet().iterator().next()
.getValue().someValueTypeMethod().eventuallyFollowedByAnotherMethod();
公共接口A扩展映射{}
deepStubMock.entrySet().iterator().next()
.getValue().someValueTypeMethod();
编辑:看起来大卫在评论中回答了我的问题:)我不确定我是否完全理解你的问题;但是Mockito()中的RETURNS\u DEEP\u STUBS答案是您需要的特性吗?