Использование совпадений Hamcrest с JMock в Groovy - PullRequest
1 голос
/ 01 декабря 2010

Я новичок в Groovy (и JMock тоже в этом отношении), и у меня возникли некоторые проблемы с построением ожиданий, которые используют сопоставители для параметров макетов методов. Когда я пытаюсь сделать что-то вроде этого:

    Expectations e = new Expectations();
    e.allowing(mockObject).doSomething(Expectations.with(aNonNull(ImmutableCollection.class)))
    e.will(returnValue(someResponse))

Вызывает следующую ошибку при построении ожидания:

groovy.lang.MissingMethodException: No signature of method: static org.jmock.Expectations.with() is applicable for argument types: (org.hamcrest.core.IsNot) values: [not null]
Possible solutions: with(boolean), with(org.hamcrest.Matcher), with(byte), with(org.hamcrest.Matcher), with(char), with(org.hamcrest.Matcher)

aNonNull возвращает Matcher<T> (org.hamcrest.core.IsNot реализует Matcher<T>), и существует метод Expectations.with, который принимает Matcher, поэтому я не уверен, почему Groovy пытается найти версию с этим принимает конкретный класс, а не интерфейс, указанный aNonNull. Я также попытался привести возвращаемое значение aNonNull к Matcher и Matcher<T> без каких-либо изменений в ошибке. Я не уверен, что есть что-то о дженериках, что сбивает с толку Groovy или что еще нужно проверить.

1 Ответ

1 голос
/ 02 декабря 2010

Согласно JavaDoc, org.jmock.Expectations.with () является экземпляром, а не статическим методом.Вот почему вы получаете сообщение об ошибке.

Кстати, среды тестирования / макета, созданные специально для Groovy, значительно облегчат вашу жизнь (даже при тестировании кода Java).Например, такое же ожидание выглядит так в Spock (http://spockframework.org):

mockObject.doSomething (_ as ImmutableCollection) >> someResponse

Еще одна инфраструктура для Groovy, о которой следует знать, это GMock (http://code.google.com/p/gmock/).

...