[Phpmyadmin-devel] Local static variable and unit testing
Marc Delisle
marc at infomarc.info
Sun Mar 24 12:38:02 CET 2013
Le 2013-03-23 11:07, Ayush Chaudhary a écrit :
> Hi
>
>
> On Saturday, 23 March 2013 at 8:24 PM, Marc Delisle wrote:
>> Le 2013-03-23 08:47, Ayush Chaudhary a écrit :
>>> Hi,
>>
>>
>> Hello,
>>
>>>
>>> I was going through the existing tests. The test 'testIsHttps'
>>> under test/classes/PMA_Config_test.php looks wrong as isHttps()
>>> should be returning true for the second test case. However, the
>>> function isHttps() uses a local static variable, which is why the
>>> test is passing as in the construct, the PmaAbsoluteUri is
>>> initialised with null and isHttps() is hence returning false in
>>> all subsequent calls.
>>>
>>> I am not sure why a local static variable was used here.
>>
>> To avoid retesting the condition for nothing?
>>
>>> A better test for this method would be if we could reset the
>>> static variable before each assertion. Since its a local static
>>> variable, I couldn't find a proper way to reset the static
>>> variable. Should we not move the static variable in the scope of
>>> the class? In fact, even if we don't use a static variable, we
>>> could just make is_https a class member and initialise it to NULL
>>> in the constructor. This would eventually achieve the same result
>>> in a neater way.
>>>
>>
>>
>> Makes sense, but watch out: isHttps() and detectHttps() are both
>> using $is_https, for different goals.
>>>
>>> Also, what approach do we take for resetting static variables if
>>> needed for unit testing? One thing I came across was using
>>> Reflection_Helper::set_static_variable($class, $name,
>>> $new_value)?
>>>
>>
>
>>
>> Yes, this approach seems interesting :
>> http://tech.blog.box.com/2012/07/unit-testing-with-static-variables/
>
> I think the purpose of the static variable is to only let isHttps()
> execute once in the lifecycle of a PMA_Config object. Regarding, the
> use of $is_https in detectHttps(), the copy of $is_https in
> detectHttps() is completely independent of the one in isHttps()
> because isHttps() creates a local copy of the variable. So
> detectHttps() would not need to be changed at all.
Yes, but on a maintenance perspective, it's confusing to be using the
same variable in one file, with two different purposes.
>
> Making $is_https a member variable and using the member variable in
> isHttps() will help to make tests more exhaustive as we will be able
> to test for 1. non-https input 2. https input 3. input when is_https
> is already set (this is the only case that is being tested right
> now)
>
> Also, regarding that approach, the issue here is that the static copy
> has scope only within the function isHttps(), so it does not seem
> possible to reset it using Reflection_Helper.
>
> Please let me know, if this would be fine. I can then write a quick
> patch to fix this, and also improve testIsHttps()
Please do; I am not the OOP expert of the team ;)
>
> Thanks, Ayush
>
>
>
> ------------------------------------------------------------------------------
>
>
Everyone hates slow websites. So do we.
> Make your web apps faster with AppDynamics Download AppDynamics Lite
> for free today: http://p.sf.net/sfu/appdyn_d2d_mar
>
>
>
> _______________________________________________ Phpmyadmin-devel
> mailing list Phpmyadmin-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/phpmyadmin-devel
>
--
Marc Delisle
http://infomarc.info
More information about the Developers
mailing list