代码之家  ›  专栏  ›  技术社区  ›  Alan Krueger

如何轻松检查对返回通配符泛型的方法的调用?

  •  14
  • Alan Krueger  · 技术社区  · 14 年前

    我们正在考虑切换到Spring 3,并在Spring 3、EasyMoCK和Java泛型的交集中遇到问题。

    在一个地方,我们模拟了一个Spring3.0抽象BeanFactory,特别是这个方法:

    public Class<?> getType(String name) throws NoSuchBeanDefinitionException { ... }
    

    在Spring的早期版本中,这将返回一个非泛型,并且一切都很好。然而,对于一般的,我们会遇到这样的问题:

    expect(mockBeanFactory.getType(CLASS_NAME)).andReturn(SOME_CLASS);
    

    因为 getType 收益率 Class<?> , andReturn 要求 班级?gt; 作为一个参数,它不能正常工作。

    有已知的解决方法吗?

    2 回复  |  直到 8 年前
        1
  •  21
  •   Ladlestein    14 年前

    我以前遇到过这样的问题,莫基托。我还不知道为什么会这样。可以将expect(..)参数强制转换为非泛型类类型ala

    expect((Class) mockBeanFactory.getType(CLASS_NAME)).andReturn(SOME_CLASS);
    

    然后你会得到一个警告,如果你想的话可以抑制它。不是一个非常优雅的解决方案;我还要花几分钟的时间来研究它。

        2
  •  3
  •   Community Justin Hirsch    7 年前

    避免任何铸造和警告的最简单方法是使用 expectLastCall() 而不是 expect(..) (见 my answer to a similar question 详情请参阅。

    所以在这种情况下:

    mockBeanFactory.getType(CLASS_NAME);
    expectLastCall().andReturn(SOME_CLASS);