Bev*_*vor 0 java generics types hamcrest
我想将一个类型存储为参数,但是当我返回它并在JUnit测试中检入时,我会得到类似的东西
Expected: an instance of Java.lang.String
but: <class java.lang.String> is a java.lang.class
Run Code Online (Sandbox Code Playgroud)
这是班级的最小化例子......
public class ContextVariableResult<T> {
private Class<T> type;
public ContextVariableResult(Class<T> type) {
this.type = type;
}
//TODO doesn't work
public Class<T> getType() {
return type;
}
}
Run Code Online (Sandbox Code Playgroud)
我传递String.class作为构造函数参数.
我的测试看起来像这样....
assertThat(result.getType(), instanceOf(String.class));
Run Code Online (Sandbox Code Playgroud)
我认为我的hamcrest匹配器是错误的,但由于编译错误,我不能使用is(String.class)或isA(String.class):
The method assertThat(T, Matcher<? super T>) in the type Assert is not applicable for the arguments (Class<capture#3-of ?>,
Matcher<String>)
Run Code Online (Sandbox Code Playgroud)
我已经尝试返回反射对象Type,我也尝试转换为ParameterizedType,但后来我得到了ClassCastExceptions等等.
我希望方法结果为"String".我错了什么?如果我不需要传递参数"String.class"会好得多,但我认为我总是会遇到类型擦除问题.
您正在检查返回值是字符串的实例,例如"hello".但是你的方法返回类String,即String.class.
我想你的方法会返回你想要的东西.在这种情况下,您甚至没有hamecrest用于验证.定期JUnit的Assert.assertEquals(String.class, result.getType())会为你工作.
| 归档时间: |
|
| 查看次数: |
377 次 |
| 最近记录: |