qa:whattotest
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revisionNext revisionBoth sides next revision | ||
qa:whattotest [2008/05/06 10:45] – created zoe | qa:whattotest [2008/05/07 12:52] – more minor format changes zoe | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== More information on what to test ==== | + | ====== More information on what to test ====== |
- | You can tell a certain amount from line coverage - but it doesn' | + | There are currently independent efforts underway to improve the testing |
- | I've put the source code for two scripts | + | ===== Some scripts |
+ | |||
+ | You can tell a certain amount from line coverage | ||
- | 1) This script runs through all of the phpt tests in the source | + | I've put the source |
+ | **Note** Both scripts look at **functions** and are not any help if you are looking at a PHP 5 OO extension. | ||
- | 2) A slight modification to Damien' | ||
- | ===== Script number 1 ===== | ||
- | < | + | ==== Script 1 ==== |
+ | This script runs through all of the phpt tests in the source tree and then compares the function calls in the tests with a complete list of PHP's internal functions. At the end it will tell you if there is a function in PHP that is not mentioned in any test case (I get 415). Thanks to Damien Seguy for this. | ||
+ | < | ||
<?php | <?php | ||
Line 80: | Line 83: | ||
} | } | ||
+ | |||
+ | ?> | ||
</ | </ | ||
- | ===== Script | + | |
- | < | + | |
+ | ==== Script 2 ==== | ||
+ | A slight modification to Damien' | ||
+ | < | ||
<?php | <?php | ||
// define here your PHP source directory | // define here your PHP source directory | ||
Line 159: | Line 167: | ||
return; | return; | ||
} | } | ||
+ | |||
+ | |||
?> | ?> | ||
</ | </ | ||
+ | ==== Script 3 ==== | ||
+ | <code php> | ||
+ | <?php | ||
+ | // define here your PHP source directory | ||
+ | define(' | ||
+ | //Get a list of all of the test (phpt) files in the source tree. | ||
+ | $files = array(); | ||
+ | get_phpt_files(PHP_SRC, | ||
+ | |||
+ | $tests_by_method=array(); | ||
+ | $class_by_method=array(); | ||
+ | |||
+ | //Get a list of all of the PHP classes | ||
+ | $classes = get_declared_classes(); | ||
+ | |||
+ | $methodArray = array(); | ||
+ | $methodNameArray = array(); | ||
+ | $method_names = array(); | ||
+ | |||
+ | //Get the method names from each class | ||
+ | foreach($classes as $class) { | ||
+ | $classInfo = new ReflectionClass($class); | ||
+ | $methodArray = $classInfo-> | ||
+ | $method_names = get_method_names($methodArray); | ||
+ | $class_by_method[$class] = array(); | ||
+ | array_push($class_by_method[$class], | ||
+ | $methodNameArray = array_merge($method_names, | ||
+ | foreach($method_names as $method) { | ||
+ | $tests_by_method[$method] = array(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | //Find all the functions that are called in the test case code | ||
+ | $tested = array(); | ||
+ | $temp_array = array(); | ||
+ | |||
+ | foreach($files as $file) { | ||
+ | $temp_array = extract_tests($file); | ||
+ | $tested = array_merge($temp_array, | ||
+ | foreach($temp_array as $function) { | ||
+ | if(array_key_exists($function, | ||
+ | array_push($tests_by_method[$function], | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | //Print out the tests in which methods are used | ||
+ | //print_r ($class_by_method); | ||
+ | foreach($classes as $class) { | ||
+ | echo " | ||
+ | foreach($class_by_method[$class] as $methods) { | ||
+ | foreach($methods as $method) { | ||
+ | if(!preg_match('/ | ||
+ | echo " | ||
+ | foreach($tests_by_method[$method] as $test) { | ||
+ | echo "Test: " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | function | ||
+ | $code = file_get_contents($file); | ||
+ | |||
+ | if (!preg_match('/ | ||
+ | // print " | ||
+ | return array(); | ||
+ | } | ||
+ | |||
+ | $tokens = token_get_all($r[1]); | ||
+ | $functions = array_filter($tokens, | ||
+ | $functions = array_map( ' | ||
+ | $functions = array_unique($functions); | ||
+ | return $functions; | ||
+ | } | ||
+ | |||
+ | function filter_functions($x) { | ||
+ | return $x[0] == 307; | ||
+ | } | ||
+ | |||
+ | function map_token_value($x) { | ||
+ | return $x[1]; | ||
+ | } | ||
+ | function get_phpt_files($dir, | ||
+ | { | ||
+ | $thisdir = dir($dir.'/' | ||
+ | while(($file = $thisdir-> | ||
+ | if ($file != ' | ||
+ | $path = $thisdir-> | ||
+ | if(is_dir($path) == true) { | ||
+ | get_phpt_files($path , $phpt_file_count , $all_phpt); | ||
+ | } else { | ||
+ | if (preg_match("/ | ||
+ | $all_phpt[$phpt_file_count] = $path; | ||
+ | $phpt_file_count++; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | return; | ||
+ | } | ||
+ | function get_method_names($methodArray) { | ||
+ | $names = array(); | ||
+ | foreach ($methodArray as $method) { | ||
+ | array_push($names, | ||
+ | } | ||
+ | return $names; | ||
+ | } | ||
+ | |||
+ | ?> | ||
+ | </ |
qa/whattotest.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1