是否有更多类型安全的替代方案(除了模拟泛型类型的非泛型子类型)?
@SuppressWarnings("unchecked")
@Test
void test() {
GenericType<ImportantTypeArgument> genericType = mock(GenericType.class);
// the rest of the test
}
更具体的例子:
@Test
@SuppressWarnings("unchecked")
void getHeadersFilter_ifNull_delegatesToInjectedObjectProvider() {
HttpHeadersFilter filterMock = mock(HttpHeadersFilter.class);
// this line includes an unchecked cast
ObjectProvider<List<HttpHeadersFilter>> headersFiltersProviderMock = mock(ObjectProvider.class);
given(headersFiltersProviderMock.getIfAvailable()).willReturn(List.of(filterMock));
// the rest of the test
}
较新版本的 Mockito 有“神奇”
mock()
方法,可以自动推断 Mock 的类型:
final GenericType<ImportantTypeArgument> genericType = mock();
此方法重载实际上接受一个可变参数数组(在这种特定情况下具有零个元素)。即使没有提供实际参数,编译器也可以选择数组的类型。