[Engine-devel] Getting rid of PowerMock?

Laszlo Hornyak lhornyak at redhat.com
Wed Mar 28 08:36:57 UTC 2012


----- Original Message -----
> From: "Yair Zaslavsky" <yzaslavs at redhat.com>
> To: "Laszlo Hornyak" <lhornyak at redhat.com>
> Cc: "engine-devel" <engine-devel at ovirt.org>
> Sent: Wednesday, March 28, 2012 9:31:34 AM
> Subject: Re: [Engine-devel] Getting rid of PowerMock?
> 
> On 03/28/2012 09:23 AM, Laszlo Hornyak wrote:
> > Hi,
> > 
> > How much faster could the unit tests run after removing powermock
> > and using the instance methods instead?
> Faster. I remind you we reached OutOfMemory when using PowerMock (it
> consumes lots of memory) and we had to split the tests and run them
> on
> separate java processes.

Ah yes, I had to set the maxpermsize to 1.5 GB to run sonar on the backend, even when running with forkmode=always
I do not care about unit-test speed that much but that memory size is crazy.

I have seen this approach in QuotaHelper and I did not completely understand why instantiate a Util object just in order to have instance methods to call static methods, so I submitted this patch http://gerrit.ovirt.org/#change,3008 as a response to Allon's patch http://gerrit.ovirt.org/#change,2975

Now I understand the idea, but for Helper / Util classes, we do not have to instantiate. We can keep all the methods still static and pass over all the data it is running with, rather than using a global variable or hiding the global variable with an overrideable instance method. E.g. in this case, we could pass the DAO classes as argument to static methods.


> 
> > 
> > I like this idea anyway because it could be a step towards
> > dependency injection.
> > Could be a more motivating long term objective than just to get rid
> > of powermock :)
> 
> I totally agree here.
> 
> > 
> > Laszlo
> > 
> > ----- Original Message -----
> >> From: "Yair Zaslavsky" <yzaslavs at redhat.com>
> >> To: "engine-devel" <engine-devel at ovirt.org>
> >> Sent: Tuesday, March 27, 2012 7:33:18 PM
> >> Subject: [Engine-devel] Getting rid of PowerMock?
> >>
> >> Hi all,
> >> As (almost) all of us can see,
> >> Running BLL tests both takes considerable time, and also we have
> >> to
> >> take
> >> class loading dependencies between classes with static methods
> >> when
> >> we
> >> use mockStatic - IMHO, this is kinda frustrating.
> >> Maybe we should start get rid of  PowerMock.
> >> Here is what I'm thinking of -
> >> Currently, as we use no IoC for DAOs , for tested class we do not
> >> use
> >> DbFacade.getInstance().getXXXDao()
> >>
> >> instead we define:
> >>
> >> protected XXXDao getXXXDao() {
> >>   return DBFacade.getInstance().getXXXDao();
> >> }
> >>
> >> And then in our tests we use Mockito to define how getXXDao acts
> >> in
> >> the
> >> test.
> >>
> >> The following can be achieved also for config values , the
> >> following
> >> way -
> >>
> >> protected <T> T getConfig(ConfigValues key) {
> >>         return Config.<T> GetValue(key);
> >>     }
> >>
> >> And then in code (for example, in a query test) -
> >>
> >>  doReturn(5).when(query).<Integer>
> >> getConfig(any(ConfigValues.SomeIntegerConstant));
> >>
> >>
> >> This effort can be done in small steps -
> >> a. Define getConfig method in base classes (i.e
> >> AuditLoggalbeBase).
> >> b. Rewrite parts (i.e Commands, and their tests) step by step
> >> (small
> >> commits)
> >>
> >> Thoughts and ideas are more than welcome,
> >>
> >> Yair
> >> _______________________________________________
> >> Engine-devel mailing list
> >> Engine-devel at ovirt.org
> >> http://lists.ovirt.org/mailman/listinfo/engine-devel
> >>
> 
> 



More information about the Devel mailing list