Sto provando a scrivere test unitari per un servizio che utilizza grailsApplication.config per eseguire alcune impostazioni. Sembra che nella mia unità test quell'istanza di servizio non abbia potuto accedere al file di configurazione (puntatore nullo) per le sue impostazioni mentre poteva accedere a quell'impostazione quando eseguivo "run-app". Come posso configurare il servizio per accedere al servizio GrailsApplication nei miei test di unità.grails Accesso alle applicazioni nell'unità Grails Test
class MapCloudMediaServerControllerTests {
def grailsApplication
@Before
public void setUp(){
grailsApplication.config=
'''
video{
location="C:\\tmp\\" // or shared filesystem drive for a cluster
yamdi{
path="C:\\FFmpeg\\ffmpeg-20121125-git-26c531c-win64-static\\bin\\yamdi"
}
ffmpeg {
fileExtension = "flv" // use flv or mp4
conversionArgs = "-b 600k -r 24 -ar 22050 -ab 96k"
path="C:\\FFmpeg\\ffmpeg-20121125-git-26c531c-win64-static\\bin\\ffmpeg"
makethumb = "-an -ss 00:00:03 -an -r 2 -vframes 1 -y -f mjpeg"
}
ffprobe {
path="C:\\FFmpeg\\ffmpeg-20121125-git-26c531c-win64-static\\bin\\ffprobe"
params=""
}
flowplayer {
version = "3.1.2"
}
swfobject {
version = ""
qtfaststart {
path= "C:\\FFmpeg\\ffmpeg-20121125-git-26c531c-win64-static\\bin\\qtfaststart"
}
} '''
}
@Test
void testMpegtoFlvConvertor() {
log.info "In test Mpg to Flv Convertor function!"
def controller=new MapCloudMediaServerController()
assert controller!=null
controller.videoService=new VideoService()
assert controller.videoService!=null
log.info "Is the video service null? ${controller.videoService==null}"
controller.videoService.grailsApplication=grailsApplication
log.info "Is grailsApplication null? ${controller.videoService.grailsApplication==null}"
//Very important part for simulating the HTTP request
controller.metaClass.request = new MockMultipartHttpServletRequest()
controller.request.contentType="video/mpg"
controller.request.content= new File("..\\MapCloudMediaServer\\web-app\\videoclips\\sample3.mpg").getBytes()
controller.mpegtoFlvConvertor()
byte[] videoOut=IOUtils.toByteArray(controller.response.getOutputStream())
def outputFile=new File("..\\MapCloudMediaServer\\web-app\\videoclips\\testsample3.flv")
outputFile.append(videoOut)
}
}
Hai la TestFor o qualsiasi annotazione in questo test? Non redeclare grailsApplication, il mock viene fornito con l'annotazione. Vedi 'GrailsUnitTestMixin'. –
sì Ha annotazione @TestFor. Ho rimosso "def grailsApplication" ma ho ottenuto il messaggio null sull'oggetto grailsApplication. BTW sto usando Grail 2.1. – Reza
Puoi pubblicare lo stacktrace? Inoltre, non sono sicuro di poter dichiarare la configurazione come questa, perché è un'istanza di ConfigObject. Farò un test e vedrò se sarà necessario usare ConfigSlurper. –