У меня есть такой код:Дразнящий объект журнала
@TestFor(MyService)
class MyServiceTests {
void testIt() {
def logTo = []
def loggerMock = mockFor(service.log.class)
loggerMock.demand.error(1..1) { String msg, Exception ex ->
logTo << [level: 'error', msg: msg, ex: ex]
}
service.log = loggerMock.createMock()
}
}
Он терпит неудачу с:
| Failure: testIt(MyServiceTests)
| java.lang.ArrayIndexOutOfBoundsException: 0
at SLF4JLog_groovyProxy.<init>(Script1.groovy:4)
at Script1.run(Script1.groovy:8)
at grails.test.GrailsMock.createMock(GrailsMock.groovy:91)
at package.MyServiceTests.testIt>>>(MyServiceTests.groovy:25)
указывая на линии service.log = loggerMock.createMock()
. Что с этим не так?
спасибо за ваш ответ. Вы были правы, нет конструктора 0-arg, поэтому я попытался использовать экземпляр прокси, согласно вашему предложению. К сожалению, у меня есть «GroovyCastException»: «Нельзя передать объект« SLF4JLog_delegateProxy @ ef57f8 »с классом« SLF4JLog_delegateProxy »в класс« org.apache.commons.logging.Log »и не мог обойти его. Но, наконец, я нашел решение: мне нужно было просто заменить «service.log.class» в моем вопросе явным именем интерфейса: 'org.apache.commons.logging.Log', который не требует конструктора , – eugene82