[Engine-devel] Getting rid of PowerMock?

Yair Zaslavsky yzaslavs at redhat.com
Wed Mar 28 09:09:38 UTC 2012


On 03/28/2012 10:55 AM, Moti Asayag wrote:
> On 03/27/2012 07:33 PM, Yair Zaslavsky wrote:
>> 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();
>> }
>>
> 
> +1 for this. IMO all DAOs should be reachable from the CommandBase as
> this is a repeated code scattered in the various commands.
> 
> I'd suggest to create an interface that declares all of available DAOs.
> The new interface should be implemented by both DbFacade (which already
> contains that implementation) and CommandBase to assure new DAOs added
> to DbFacade will be added to the CommandBase as well.
+1 On your idea.
Too bad QueriesCommandBase and CommandBase do no share the same parent.
Your idea is needed in queries as well.


> 
>> 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,
> 
> Searching for the static mocked classes brought the following list:
> 
>       1 AuditLogDirector.class
>       1 CommandsFactory.class
>       1 FileUtil.class
>       1 LoggerFactory.class
>       1 QuotaHelper.class
>       1 QuotaManager.class
>       1 SchedulerUtilQuartzImpl.class
>       1 StopVdsCommand.class
>       1 TransactionSupport.class
>       1 VmTemplateCommand.class
>       2 CpuFlagsManagerHandler.class
>       2 StorageDomainSpaceChecker.class
>       2 VdsGroupDAO.class
>       3 EjbUtils.class
>       3 LogFactory.class
>       3 MultiLevelAdministrationHandler.class
>       3 StorageHelperDirector.class
>       3 VmTemplateHandler.class
>       6 ImagesHandler.class
>       6 VmHandler.class
>      10 Backend.class
>      28 Config.class
>      33 DbFacade.class
> 
> So handling the Config and DbFacade will be a major step toward
> powermock elimination.
> (list retrieved by running the next command from ovirt-engine head: find
> . -name "*Test.java" -exec grep -r "@PrepareForTest" {} \; | tr "{)}" "
> " | cut -d \(  -f2 | tr "," "\n" | tr -d " " | sort | uniq -c | sort -n)
> 
> 
>>
>> Yair
>> _______________________________________________
>> Engine-devel mailing list
>> Engine-devel at ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/engine-devel
> 
> _______________________________________________
> Engine-devel mailing list
> Engine-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/engine-devel




More information about the Devel mailing list