Project

General

Profile

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.
(1-1/2)