2012-02-27 3 views
2

Я кошмары с синтаксисом для этого и EasyMock:EasyMock согласовань для типа данных класса

public void foo(Class<?> clazz); 

EasyMock.expects(object.foo(EasyMock.isA(???))); 

Что я должен положить, если мой аргумент String.class? Я сначала подумал:

EasyMock.isA(((Class<?>)(String.class)).getClass())

Тем не менее, когда я делаю Foo вызова (String.class) я получаю:

java.lang.IllegalStateException: missing behavior definition for the preceding method call:

ответ

6

Вы пытаетесь проверить общий тип, который будет стерт во время выполнения в любом случае.

Используйте объект съемки вместо:

Capture<Class<?>> classCapture = new Capture<Class<?>>(); 
EasyMock.expect(object.foo(EasyMock.capture(classCapture))); 

// ... other test setup ... 

Assert.assertEquals(classCapture.getValue(), String.class); 
1

Я думаю, что следующий будет также работать как ожидают заявления, если вы не хотите использовать Capture:

EasyMock.expects(object.foo(EasyMock.isA(String.class.getClass()))); 
+1

не будет 'Строка .class.getClass() 'всегда возвращает' java.lang.Class'? – artbristol

+0

Да, вы правы. 'String.class.getClass()' всегда будет возвращать 'java.lang.Class'. Не уверен, что я думал. Использование Capture, как было предложено в ответе @artbristol, - это путь. –

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