summaryrefslogtreecommitdiff
path: root/docs/source/testing.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/source/testing.rst')
-rw-r--r--docs/source/testing.rst62
1 files changed, 62 insertions, 0 deletions
diff --git a/docs/source/testing.rst b/docs/source/testing.rst
new file mode 100644
index 00000000..a968ae50
--- /dev/null
+++ b/docs/source/testing.rst
@@ -0,0 +1,62 @@
+..
+ Copyright 2011 OpenStack, LLC
+ All Rights Reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+===============
+Testing Horizon
+===============
+
+How to run the tests
+====================
+
+Because Horizon is composed of both the ``horizon`` app and the
+``openstack-dashboard`` reference project, there are in fact two sets of unit
+tests. While they can be run individually without problem, there is an easier
+way:
+
+Included at the root of the repository is the ``run_tests.sh`` script
+which invokes both sets of tests, and optionally generates analyses on both
+components in the process. This script is what what Jenkins uses to verify the
+stability of the project, so you should make sure you run it and it passes
+before you submit any pull requests/patches.
+
+To run the tests::
+
+ $ ./run_tests.sh
+
+.. seealso::
+
+ :doc:`ref/run_tests`
+ Full reference for the ``run_tests.sh`` script.
+
+How to write good tests
+=======================
+
+Horizon uses Django's unit test machinery (which extends Python's ``unittest2``
+library) as the core of it's test suite. As such, all tests for the Python code
+should be written as unit tests. No doctests please.
+
+A few pointers for writing good tests:
+
+ * Write tests as you go--If you save them to the end you'll write less of
+ them and they'll often miss large chunks of code.
+ * Keep it as simple as possible--Make sure each test tests one thing
+ and tests it thoroughly.
+ * Think about all the possible inputs your code could have--It's usually
+ the edge cases that end up revealing bugs.
+ * Use ``coverage.py`` to find out what code is *not* being tested.
+
+In general new code without unit tests will not be accepted, and every bugfix
+*must* include a regression test.