Fix also a few bugs found while rewriting the test suite. In order to be able to run integration tests, the test suite requires a version of Redis >= 2.4.0. The units have been splitted into several different groups using PHPUnit @group annotation to allow developers to enable, disable and combine certain types of tests. The available groups are: - disconnected: can run without a Redis server online - connected: active connection to a Redis server is required - commands: test dedicated to a specific Redis command - slow: performs operations that can slow down execution; A list of the available groups can be obtained by running phpunit --list-groups Groups of tests can be disabled or enabled via the XML configuration file or the standard command-line test runner. Please note that due to a bug in PHPUnit, older versions ignore the --group option when the group is excluded in the XML configuration file. Please refer to http://github.com/sebastianbergmann/phpunit/issues/320 for details Integration tests in the @connected group check if the command being tested is defined in the selected server profile (see the value of the TEST_SERVER_VERSION constant in phpunit.xml). If the command is not defined in the target server profile, the integration test is automatically marked as skipped. We also provide an helper script in the bin directory that can be used to automatically generate a file with the scheleton of a test case for a Redis command by specifying the name of the class in the Predis\Commands namespace. For example, to generate a test case for SET (represented by the Predis\Commands\StringSet class): ./bin/generate-command-test.php --class=StringSet The realm of a command is automatically inferred from the name of the class, but it can be set using the --realm option.
About testing Predis
ATTENTION: Do not run this test suite against instances of Redis running in production environments or containing data you are interested in! If you still want to test this software on a production server without hitting the database, please read on to undestand how to disable integration tests.
Predis ships with a comprehensive test suite that uses PHPUnit to cover every
aspect of the library. The suite is organized into several unit groups with the
PHPUnit @group annotation which makes it possible to run only selected groups
of tests. The main groups are:
- disconnected: generic tests that verify the correct behaviour of the library without requiring an active connection to Redis.
- connected: integration tests that require an active connection to Redis
- commands: tests for the implementation of Redis commands.
- slow: tests that might slow down the execution of the test suite, they can be either connected or disconnected.
A list of all the available groups in the suite can be obtained by running:
$ phpunit --list-groups
Groups of tests can be disabled or enabled via the XML configuration file or the
standard command-line test runner. Please note that due to a bug in PHPUnit,
older versions ignore the --group option when the group is excluded in the XML
configuration file. More details about this issue are available on PHPUnit's bug
tracker.
Certain groups of tests that require native extensions, such as ext-curl or
ext-phpiredis, are excluded by default in the XML configuration file. If you want
to test Predis using the phpiredis-based connection or against an instance of Webdis,
you should remove those groups of tests from the exclusion list in phpunit.xml.
Combining groups for inclusion or exclusion with the command-line runner
$ phpunit --group disconnected --exclude-group commands,slow
Integration tests
The suite performs integration tests against a running instance of Redis (>= 2.4.0 is required) to verify the correct behaviour of the implementation of each command and certain abstractions implemented in Predis that depend on them. These tests are identified by the connected group.
Integration tests for commands that are not defined in the specified server profile
(see the value of the TEST_SERVER_VERSION constant in phpunit.xml) are marked
as skipped automatically.
By default, the test suite is configured to execute integration tests using the
server profile for Redis v2.4 (which is the current stable version of Redis). You
can optionally run the suite against a Redis instance built from the unstable
branch with the development profile by changing the TEST_SERVER_VERSION to dev
in the phpunit.xml file.
If you do not have a Redis instance up and running or available for testing, you can disable integration tests completely by excluding the connected group:
$ phpunit --exclude-group connected
Slow tests
Certain tests can slow down the execution of the test suite. These tests can be disabled by excluding the by the slow group:
$ phpunit --exclude-group slow
Testing Redis commands
We also provide an helper script in the bin directory that can be used to automatically
generate a file with the scheleton of a test case to test a Redis command by specifying
the name of the class in the Predis\Commands namespace (only classes in this namespace
are considered valid). For example, to generate a test case for SET (represented by the
Predis\Commands\StringSet class):
$ ./bin/generate-command-test.php --class=StringSet
Each command has its own realm (commands that operate on strings, lists, sets and such)
and this realm is automatically inferred from the name of the specified class. The realm
can be also specified manually using the --realm option.