grailsApplication access in Grails unit Test
Solution 1
Constructing grailsApp using DefaultGrailsApplication would work.
class ZazzercodeUnitTestCase extends GrailsUnitTestCase {
def grailsApplication = new org.codehaus.groovy.grails.commons.DefaultGrailsApplication()
def chortIndex= grailsApplication.config.zazzercode.chortIndex
}
Solution 2
Go to http://ilikeorangutans.github.io/2014/02/06/grails-2-testing-guide
Grails’ config is usually accessed via an injected instance of GrailsApplication using the config property. Grails injects GrailsApplication into unit tests, so you can access it directly:
@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
}
}
Reza
I am an experimental computer scientist. I got my PhD in computer science from UC Irvine. I am interested in any challenging work in Data Engineering and Science, Service Oriented Architecture, System Modeling and Optimization.
Updated on July 23, 2022Comments
-
Reza almost 2 years
I am trying to write unit tests for a service which use grailsApplication.config to do some settings. It seems that in my unit tests that service instance could not access the config file (null pointer) for its setting while it could access that setting when I run "run-app". How could I configure the service to access grailsApplication service in my unit tests.
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) } }