您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

模拟使用mockito使用通配符返回泛型的方法

模拟使用mockito使用通配符返回泛型的方法

:从Mockito 1.10.x开始,嵌入在类中的泛型类型现在由Mockito用于深层存根。即。

public interface A<T extends Observer & Comparable<? super T>>  {
  List<? extends B> bList();
  T observer();
}

B b = deep_stubbed.bList().iterator().next(); // returns a mock of B ; mockito remebers that A returns a List of B
Observer o = deep_stubbed.observer(); // mockito can find that T super type is Observer
Comparable<? super T> c = deep_stubbed.observer(); // or that T implements Comparable

Mockito尽最大努力获取编译器嵌入的类型信息,但是当应用擦除时,mockito除了返回的模拟外,什么也不能做Object

:恩,泛型比Mockito的问题更多。对于泛型,您应该阅读 在其上写的内容。对于当前主题(即通配符),请阅读本

但简而言之,您可以使用Mockito的另一种语法来帮助您解决当前情况:

doReturn(interfaces).when(classAMock).getMyInterfaces();

或使用BDD别名:

willReturn(interfaces).given(classAMock).getMyInterfaces();

不过,您可以编写更加通用的包装器。这将有助于将来的开发人员使用相同的第三方API。

附带说明:您不应该模拟自己不拥有的类型,它会导致许多错误和问题。相反,您应该有一些包装。例如,DAO和存储库就代表了这样的想法,它将模拟DAO或存储库接口,而不是JDBC / JPA / hibernate。有许多关于此的博客文章

其他 2022/1/1 18:15:23 有640人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶