gpt4 book ai didi

java - Mockito:使用有界通配符返回类型的 stub 方法

转载 作者:IT老高 更新时间:2023-10-28 11:21:33 25 4
gpt4 key购买 nike

考虑这段代码:

public class DummyClass {
public List<? extends Number> dummyMethod() {
return new ArrayList<Integer>();
}
}
public class DummyClassTest {
public void testMockitoWithGenerics() {
DummyClass dummyClass = Mockito.mock(DummyClass.class);
List<? extends Number> someList = new ArrayList<Integer>();
Mockito.when(dummyClass.dummyMethod()).thenReturn(someList); //Compiler complains about this
}
}

编译器提示试图为 dummyMethod() stub 的行。关于如何处理返回具有有界通配符类型的 stub 方法的任何指针?

最佳答案

你也可以使用非类型安全的方法doReturn为此,

@Test
public void testMockitoWithGenerics()
{
DummyClass dummyClass = Mockito.mock(DummyClass.class);
List<? extends Number> someList = new ArrayList<Integer>();

Mockito.doReturn(someList).when(dummyClass).dummyMethod();

Assert.assertEquals(someList, dummyClass.dummyMethod());
}

discussed在 Mockito 的谷歌小组上。

虽然这比 thenAnswer 简单,再次注意它不是类型安全的。如果您担心类型安全,请调用 Millhouse 的 answer是正确的。

其他详情

要清楚,这是观察到的编译器错误,

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

我相信编译器在 when 期间分配了第一个通配符类型。调用,然后无法确认 thenReturn 中的第二个通配符类型调用是一样的。

看起来像 thenAnswer不会遇到此问题,因为它接受通配符类型,而 thenReturn采用非通配符类型,必须被捕获。来自 Mockito 的 OngoingStubbing ,

OngoingStubbing<T> thenAnswer(Answer<?> answer);
OngoingStubbing<T> thenReturn(T value);

关于java - Mockito:使用有界通配符返回类型的 stub 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7366237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com