1
|
# About testing Predis #
|
2
|
|
3
|
__ATTENTION__: Do not ever ever run this test suite against instances of Redis running in production
|
4
|
environments or containing data you are interested in! If you still want to test this library on a
|
5
|
production server without hitting the database, please read ahead about how to disable integration
|
6
|
tests.
|
7
|
|
8
|
Predis ships a comprehensive test suite that uses __PHPUnit__ to cover every aspect of the library.
|
9
|
The suite is organized into several unit groups with the PHPUnit `@group` annotation which makes it
|
10
|
possible to run only selected groups of tests. The main groups are:
|
11
|
|
12
|
- __disconnected__: generic tests verifying the correct behaviour of the library without requiring
|
13
|
an active connection to Redis.
|
14
|
- __connected__: integration tests that require an active connection to Redis
|
15
|
- __commands__: tests for the implementation of Redis commands.
|
16
|
- __slow__: tests that might slow down the execution of the test suite (either __connected__ or
|
17
|
__disconnected__).
|
18
|
|
19
|
A list of all the available groups in the suite can be obtained by running:
|
20
|
|
21
|
```bash
|
22
|
$ phpunit --list-groups
|
23
|
```
|
24
|
|
25
|
Groups of tests can be disabled or enabled via the XML configuration file or the standard command
|
26
|
line test runner. Please note that due to a bug in PHPUnit, older versions ignore the `--group`
|
27
|
option when the group is excluded in the XML configuration file. More details about this issue are
|
28
|
available on [PHPUnit's bug tracker](http://github.com/sebastianbergmann/phpunit/issues/320).
|
29
|
|
30
|
Certain groups of tests requiring native extensions, such as `ext-curl` or `ext-phpiredis`, are
|
31
|
disabled by default in the configuration file. To enable these groups of tests you should remove
|
32
|
them from the exclusion list in `phpunit.xml`.
|
33
|
|
34
|
### Combining groups for inclusion or exclusion with the command-line runner ###
|
35
|
|
36
|
```bash
|
37
|
$ phpunit --group disconnected --exclude-group commands,slow
|
38
|
```
|
39
|
|
40
|
### Integration tests ###
|
41
|
|
42
|
The suite performs integration tests against a running instance of Redis (>= 2.4.0) to verify the
|
43
|
correct behavior of the implementation of each command and certain abstractions implemented in the
|
44
|
library that depend on them. These tests are identified by the __connected__ group.
|
45
|
|
46
|
Integration tests for commands that are not defined in the specified server profile (see the value
|
47
|
of the `REDIS_SERVER_VERSION` constant in `phpunit.xml`) are marked as __skipped__ automatically.
|
48
|
|
49
|
By default, the test suite is configured to execute integration tests using the server profile for
|
50
|
Redis v2.6. You can run the suite against a Redis instance built from the `unstable` branch with the
|
51
|
development profile by changing the `REDIS_SERVER_VERSION` to `dev` in the `phpunit.xml` file, or to
|
52
|
`2.8` for the current stable version.
|
53
|
|
54
|
If you do not have a Redis instance up and running or available for testing, you can completely
|
55
|
disable integration tests by excluding the __connected__ group:
|
56
|
|
57
|
```bash
|
58
|
$ phpunit --exclude-group connected
|
59
|
```
|
60
|
|
61
|
### Slow tests ###
|
62
|
|
63
|
Certain tests can slow down the execution of the suite. These tests can be disabled by excluding the
|
64
|
__slow__ group:
|
65
|
|
66
|
```bash
|
67
|
$ phpunit --exclude-group slow
|
68
|
```
|
69
|
|
70
|
### Testing Redis commands ###
|
71
|
|
72
|
We also provide an helper script in the `bin` directory that can be used to automatically generate a
|
73
|
file with the scheleton of a test case to test a Redis command by specifying the name of the class
|
74
|
in the `Predis\Command` namespace (only classes in this namespace are considered valid). For example
|
75
|
to generate a test case for `SET` (represented by the `Predis\Command\StringSet` class):
|
76
|
|
77
|
```bash
|
78
|
$ ./bin/create-command-test --class=StringSet
|
79
|
```
|
80
|
|
81
|
Each command has its own realm (e.g. commands operating on strings, lists, sets and such) which is
|
82
|
automatically inferred from the name of the specified class. The realm can be also provided manually
|
83
|
leveraging the `--realm` option.
|