我想爲使用grailsApplication.config做一些設置的服務編寫單元測試。看起來在我的單元測試中,服務實例無法訪問配置文件(空指針)的設置,而當我運行「run-app」時它可以訪問該設置。我如何配置服務以在單元測試中訪問grailsApplication服務。Grails在Grails中的應用程序訪問單元測試
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)
}
}
你有TestFor或在本次測試的任何註釋?不要重新聲明grailsApplication,模擬附帶註釋。請參閱'GrailsUnitTestMixin'。 –
是的它有@TestFor註釋。我刪除了「def grailsApplication」,但在grailsApplication對象上得到了消息null。順便說一句,我正在使用Grail 2.1。 – Reza
你可以發佈堆棧跟蹤嗎?另外,我不確定你可以像這樣聲明配置,因爲它是ConfigObject的一個實例。我會做一個測試,看看你是否需要使用ConfigSlurper。 –