----- Original Message -----
From: "Yair Zaslavsky" <yzaslavs(a)redhat.com>
To: "Laszlo Hornyak" <lhornyak(a)redhat.com>
Cc: "engine-devel" <engine-devel(a)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(a)redhat.com>
>> To: "engine-devel" <engine-devel(a)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(a)ovirt.org
>>
http://lists.ovirt.org/mailman/listinfo/engine-devel
>>