비웃음하기 : 나는 그런 코드가 로그 객체
| 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()
를 가리키는 :
@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()
}
}
그것은 실패합니다. 그게 뭐가 잘못 됐어?
답변 해 주셔서 감사합니다. 당신 말이 맞았습니다. 0-arg 생성자가 없으므로, 여러분의 제안에 따라 프록시 인스턴스를 사용하려고했습니다. 불행하게도 'GroovyCastException'을 받았습니다.'클래스 'SLF4JLog_delegateProxy'를 사용하여 'SLF4JLog_delegateProxy @ ef57f8'객체를 'org.apache.commons.logging.Log'클래스로 캐스팅 할 수 없으며 해결할 수 없습니다. 그러나 마침내 나는 해결책을 찾았다 : 나는 단지'service.log.class'를 인터페이스의 명시적인 이름 인'org.apache.commons.logging.Log'로 바꾸어야했다. 이것은 생성자를 필요로하지 않는다. . – eugene82