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 :
- Trying to get property of non-object - $fields_meta[0]->table
- 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.
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*