如何创建java.lang.reflect.Type

时间:2018-01-08 17:08:28

标签: java

我有以下实现:

   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>。我想在我的测试中做同样的事情。

2 个答案:

答案 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.
}