我有以下实现:
public boolean canWrite(Type type, Class<?> clazz, MediaType mediaType) {
if (!type.getTypeName().contains("TypeX")) {
return false;
}
return true;
}
我想测试这个方法,因此我需要传入一个Type参数。
在我的测试中,如何为类型为X的List构建Type参数?
Spring以某种方式可以填充类型,使其包含类型名称List<x.y.y.TypeX>
。我想在我的测试中做同样的事情。
答案 0 :(得分:2)
最好的方法是在测试中创建所需类型的实例,并反射性地提取Type
对象:
public final class MyTest {
private final List<TypeX> listOfTypeX = null;
private final Type typeOfListOfTypeX = MyTest.class
.getDeclaredField("listOfTypeX")
.getGenericType();
}
顺便说一句,如果您问题中提到的MediaType
实际上是Guava的com.google.common.net.MediaType
,那么您还可以访问Guava的com.google.common.reflect.TypeToken
,这提供了一种更简单的方法:
Type typeOfListOfTypeX = new TypeToken<List<TypeX>>() {}.getType();
答案 1 :(得分:0)
因为你正在测试,
使用测试工具创建Type
的模拟。
使用Mockito和JUnit, 这看起来像这样:
@Mock
private java.lang.reflect.Type mockType;
@Before
private void beforeTest()
{
MockitoAnnotations.initMocks(this);
}
@Test
public void useTheMockTest()
{
... do your test.
}