On Jun 29, 2009, at 12:35 PM, Asiri Rathnayake wrote: > Hi, > > On Mon, Jun 29, 2009 at 3:52 PM, Vincent Massol <[email protected]> > wrote: > >> >> On Jun 29, 2009, at 12:05 PM, Asiri Rathnayake wrote: >> >>> Hi, >>> >>>> May be override the tearDown() method and cleanup the file? But I'm >>>>> not sure >>>>> if this is possible with the way rendering tests are done. >>>> >>>> No, no. >>>> >>>> There are 2 options: >>>> - Best: Do not create an image. Just verify that jfreechart is >>>> called >>>> and verify where it would create the image . To be done with some >>>> mocks. >>>> - Not as good: pass the location from the pom.xml. Actually it's >>>> already passed by surefire so you just need to retrieve it as a >>>> system >>>> property. >>> >>> >>> Fixed by using "java.io.tmpdir" system property. >> >> This is bad. For several reasons: >> >> 1) This is a unit test and it doesn't need to prove that jfreechart >> works >> 2) Any application that creates files a bit everywhere are very bad. >> Even if you added a remove on shutdown hook it would still be bad >> since if the application was killed there would be leftovers. >> 3) It's easy for a unit test to control what happens and use mocks >> where need be. It also improves the code design in general. >> > > It's not the ChartGenerator that generates the chart image file. > ChartGenerator returns a byte[] which represents the chart. It's the > ChartMacro which writes out the chart image file. > > I can avoid this problem by: > > 1. Declaring the chart image file generation method (generateChart) > abstract > in ChartMacro > > 2. Extending the ChartMacro with TestChartMacro (already done) > > 3. Overriding the generateChart method in ChartMacro and avoiding > the chart > image file being written to disk. > > This will work fine and no files will be written on disk. I refused > to do > this because we wil be marking generateChart() method as abstract > only to > make it easy for us to write test cases. >
What you need is a class for storing images. A default implementation would store in a temporary location on the file system. Another implementation could store in memory or in a DB or... You'd then use a dynamic mock implementation for the test which does nothing. -Vincent _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

