java - 具有泛型的模拟方法并在返回类型中扩展

标签 java generics mockito

是否可以使用签名模拟(使用 mockito)方法 Set<? extends Car> getCars()没有抑制警告?我试过:

XXX cars = xxx;
when(owner.getCars()).thenReturn(cars);

但无论我如何声明cars我总是遇到编译错误。 例如,当我这样声明时

Set<? extends Car> cars = xxx

我得到标准的通用/mockito 编译错误

The method thenReturn(Set<capture#1-of ? extends Car>) in the type OngoingStubbing<Set<capture#1-of ? extends Car>> is not applicable for the arguments (Set<capture#2-of ? extends Car>)

最佳答案

使用 doReturn-when 备用 stub 语法。

被测系统:

public class MyClass {
  Set<? extends Number> getSet() {
    return new HashSet<Integer>();
  }
}

和测试用例:

import static org.mockito.Mockito.*;

import java.util.HashSet;
import java.util.Set;

import org.junit.Test;

public class TestMyClass {
  @Test
  public void testGetSet() {
    final MyClass mockInstance = mock(MyClass.class);

    final Set<Integer> resultSet = new HashSet<Integer>();
    resultSet.add(1);
    resultSet.add(2);
    resultSet.add(3);

    doReturn(resultSet).when(mockInstance).getSet();

    System.out.println(mockInstance.getSet());
  }
}

不需要错误或警告抑制

关于java - 具有泛型的模拟方法并在返回类型中扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10554955/

相关文章:

java - Jboss wildfly Java 兼容性

java - Vaadin 文本区域已过时

java - 如何使用 Mockito 验证测试期间调用了 SUT 的另一个公共(public)方法

java - PowerMock 静态方法 stub 似乎不起作用

java - 如何使用套接字实现 Spark 流式输出

Java非托管内存流

scala - 使用抽象类型而不是参数类型的 F-Bound 多态性?

java - Java 中未绑定(bind)的泛型返回类型

c# - 如何使用泛型类型简化此代码?

java - 模拟对象来运行不同的 void 方法