[英]grailsApplication access in Grails unit Test
我正在尝试为使用grailsApplication.config进行某些设置的服务编写单元测试。 似乎在我的单元测试中,服务实例无法访问其设置的配置文件(空指针),而当我运行“run-app”时它可以访问该设置。 如何在单元测试中配置服务以访问grailsApplication服务。
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
Grails(2.0)已经为您模拟grailsApplication,只需设置您的配置,但不要声明grailsApplication。 这样做会覆盖模拟的实例。
@TestFor(MyService)
class MyServiceTests {
@Before
public void setUp() {
grailsApplication.config.something = "something"
}
@Test
void testSomething() {
MyService service = new MyService()
service.grailsApplication = grailsApplication
service.doSomething()
}
}
编辑 :
您声明了一个String
,要添加到配置,您必须解析它。 看这里的例子。
基本上,您使用ConfigSlurper().parse()
来获取ConfigObject
,并使用grails.config.merge()
将内容添加到配置中。
使用DefaultGrailsApplication构建grailsApp会起作用。
class ZazzercodeUnitTestCase extends GrailsUnitTestCase {
def grailsApplication = new org.codehaus.groovy.grails.commons.DefaultGrailsApplication()
def chortIndex= grailsApplication.config.zazzercode.chortIndex
}
请访问http://ilikeorangutans.github.io/2014/02/06/grails-2-testing-guide
通常使用config属性通过注入的GrailsApplication实例访问Grails的配置。 Grails将GrailsApplication注入单元测试,因此您可以直接访问它:
@TestMixin(GrailsUnitTestMixin)
class MySpec extends Specification {
private static final String VALUE = "Hello"
void "test something with config"() {
setup:
// You have access to grailsApplication.config so you can
//modify these values as much as you need, so you can do
grailsApplication.config.myConfigValue = VALUE
assert:
grailsApplication.config.myConfigValue == VALUE
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.