diff options
author | Greg Aker <greg.aker@ellislab.com> | 2011-04-21 22:19:37 +0200 |
---|---|---|
committer | Greg Aker <greg.aker@ellislab.com> | 2011-04-21 22:19:37 +0200 |
commit | b58aeaca9be4b342bb6d88138005fdc7138828b4 (patch) | |
tree | f986aefeec38cfb6938c93f90596c41631edd7ce /tests/readme.txt | |
parent | 1d3021a26e3d542137ceddc6c0f4a08a4f80a096 (diff) | |
parent | 9512ab8a22ff14a3789cba6e5ace03aed4196e23 (diff) |
Branch merge
Diffstat (limited to 'tests/readme.txt')
-rw-r--r-- | tests/readme.txt | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/tests/readme.txt b/tests/readme.txt new file mode 100644 index 000000000..b1e9b732f --- /dev/null +++ b/tests/readme.txt @@ -0,0 +1,137 @@ +# Do not merge to default until this is blank # + +- Clean up naming conventions +- Figure out config stuff +- Figure out database testing + + + +# -------------- CodeIgniter Testing (4/20/2011) -------------- # + + +# Introduction: + +This is the preliminary CodeIgniter testing documentation. It +will cover both internal as well as external APIs and the reasoning +behind their implemenation, where appropriate. As with all CodeIgniter +documentation, this file should maintain a mostly human readable +format to facilitate clean api design. [see http://arrenbrecht.ch/testing/] + +*FIRST PUBLIC DRAFT: EVERYTHING IS SUBJECT TO CHANGE* + +# Requirements + +1. PHP Unit + - pear channel-discover pear.phpunit.de + - pear install phpunit/PHPUnit + +2. vfsStream + - pear channel-discover pear.php-tools.net + - pear install pat/vfsStream-alpha + + +# Test Suites: + +CodeIgniter bootstraps a request very directly, with very flat class +hierarchy. As a result, there is no main CodeIgniter class until the +controller is instantiated. + +This has forced the core classes to be relatively decoupled, which is +a good thing. However, it makes that portion of code relatively hard +to test. + +Right now that means we'll probably have two core test suites, along +with a base for application and package tests. That gives us: + +1. Bootstrap Test - test common.php and sanity check codeigniter.php [in planning] +2. System Test - test core components in relative isolation [in development] +3. Application Test - bootstrapping for application/tests [not started] +4. Package Test - bootstrapping for <package>/tests [not started] + + +## 1. Bootstrap Test + +Testing common.php should be pretty simple. Include the file, and test the +functions. May require some tweaking so that we can grab the statics from all +methods (see is_loaded()). Testing the actual CodeIgniter.php file will most +likely be an output test for the default view, with some object checking after +the file runs. Needs consideration. + + +## 2. System Test + +Testing the core system relies on being able to isolate the core components +as much as possible. A few of them access other core classes as globals. These +should be mocked up and easy to manipulate. + +All functions in common.php should be a minimal implementation, or and mapped +to a method in the test's parent class to gives us full control of their output. + + +### CI_TestCase Documentation + + +Test cases should extend CI_TestCase. This internally extends +PHPUnit_Framework_TestCase, so you have access to all of your +usual PHPUnit methods. + +We need to provide a simple way to modify the globals and the +common function output. We also need to be able to mock up +the super object as we please. + +Current API is *not stable*. Names and implementations will change. + +$this->ci_set_config($key, $val) + Set the global config variables. If key is an array, it will + replace the entire config array. They are _not_ merged. + +$this->ci_instance($obj) + set the object to use as the "super object", in a lot + of cases this will be a simple stdClass with the attributes + you need it to have. If no parameter, will return the instance. + +$this->ci_instance_var($name, $val) + add an attribute to the super object. This is useful if you + set up a simple instance in setUp and then need to add different + class mockups to your super object. + +$this->ci_core_class($name) + Get the _class name_ of a core class, so that you can instantiate + it. The variable is returned by reference and is tied to the correct + $GLOBALS key. For example: + $cfg =& $this->ci_core_class('cfg'); // returns 'CI_Config' + $cfg = new $cfg; // instantiates config and overwrites the CFG global + +$this->ci_set_core_class($name, $obj) + An alternative way to set one of the core globals. + +$this->ci_get_config() __internal__ + Returns the global config array. Internal as you shouldn't need to + call this (you're setting it, after all). Used internally to make + CI's get_config() work. + +CI_TestCase::instance() __internal__ + Returns an instance of the current test case. We force phpunit to + run with backup-globals enabled, so this will always be the instance + of the currently running test class. + +## 3. Application Test: + +Not sure yet, needs to handle: +- Libraries +- Helpers +- Models +- MY_* files +- Controllers (uh...?) +- Views? (watir, selenium, cucumber?) + +- Database Testing + + +## 4. Package Test: + +I don't have a clue how this will work. + +Needs to be able to handle packages +that are used multiple times within the application (i.e. EE/Pyro modules) +as well as packages that are used by multiple applications (library distributions)
\ No newline at end of file |