2013-07-15 1 views
0

Я хочу сохранить тип в качестве параметра, но когда я вернуть его и проверить в рамках теста JUnit, я получаю что-то вродеКак вернуть тип I, явно переданный как параметр?

Expected: an instance of Java.lang.String 
but: <class java.lang.String> is a java.lang.class 

Это является minimalized примером класса ...

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; 
    } 
} 

I pass String.class как параметр конструктора.

Мой тест выглядит так ....

assertThat(result.getType(), instanceOf(String.class)); 

Я думал, что мой Hamcrest согласовани это неправильно, но я не могу использовать есть (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>) 

Я уже пытался вернуть объект Reflection типа, я также пытался бросить в Par ameterizedType, но затем я получаю ClassCastExceptions и так далее.

Я хочу, чтобы результат метода был «String». Что я не так? Было бы намного лучше, если мне не нужно передавать параметр «String.class», но тогда я думаю, что всегда получаю тип стирания проблемы.

ответ

6

Вы проверяете, что возвращаемое значение является экземпляром строки, например. "hello". Но ваш метод возвращает класс String, то есть String.class.

Я предполагаю, что ваш метод возвращает то, что вы хотели. В этом случае вы даже не используете hamecrest для вашей проверки. Регулярный JUnitAssert.assertEquals(String.class, result.getType()) будет работать для вас.

4

Класс, который вы написали, в порядке. Ваш тест неверен, потому что Class<String> не является экземпляром String. Измените утверждение:

assertThat(result.getType(), is(String.class)); 
// or 
assertEquals(String.class, result.getType()); 
+1

assertEquals работает, но когда я пытаюсь использовать первый, Eclipse говорит мне: «Метод assertThat (T, Matcher ) в типе Assert не применим для аргументов (Class , \t Matcher ) ' – Bevor

 Смежные вопросы

  • Нет связанных вопросов^_^