> These days I'm having problems with improving the test cases.
> It's not a good idea to run all the tests after improve test for each
> function since it takes much time.
> As well I can't run tests individually without errors again and again.
> (File not found, undefined constant, undefined variable)
> I cannot find that my tests are correct or not.Chanaka
First of all the tests should run standalone as well as part of
testsuite. I see lot of tests fail in both modes, so maybe that's the
reason why it fails for you?
> Please suggest me some way to get rid of this problem.
> Its very helpful if you can give one example for fixing a failing test in
> PMA_DisplayResults_test.php
Fix the tests and code to work together :-).
Okay I'll try again Michal
Hi Michal,
I managed to run only needed tests by modifying phpunit.xml.dist file. And now Its no need to wait till all tests are running.
The problem for the errors in PMA_DisplayResults_test.php tests is not properly set the properties of PMA_DisplayResults class.
So that, I get following two types of errors :
1. Trying to get property of non-object - $fields_meta[0]->table
2. Invalid argument supplied for foreach() - foreach ($vertical_display[$operation] as $val)
I try to set those parameters by calling setProperties() method.
As I found, the conditions inside __set and __get method are not satisfying.
That is,
if (property_exists($this, $property))
But if I print the object at testing time, it shows me the properties are actually there itself.
I am confusing about this.
Do you have any idea or suggestion for this ?
Hi Michal,
I just found that, property_exists method cannot detect properties in magic method __get, from the manual [0].
I'll try with changing the method names.
[0] : http://php.net/manual/en/function.property-exists.php
Hi Michal,
I try some modifications in those magic methods in order to fix those tests.
I use an array to store the all properties instead of using separate set of properties. (I feel Dieter also try to say something like that in a previous mail)
Now there is no doubt of using magic methods at any place.
I need your suggestion before doing this change.
Following snippet shows what I'm going to do.
// initialize at the top so that any property should include here
private $_properties_array = array('_db'=>null, '_table'=>null, .........);
public function __set($property, $value)
{
if(array_key_exists($property, $this->_properties_array)) { // check array key is defined - this is same as check property exist
$this->_properties_array[$property] = $value;
}
}
public function __get($property)
{
if(array_key_exists($property, $this->_properties_array)) {
return $this->_properties_array[$property];
}
}
Waiting for your suggestions.
Regards !
Chanaka