aboutsummaryrefslogtreecommitdiffhomepage
path: root/doc/md/Unit-tests.md
blob: 74920ac10ef9b7a4e5c065e7bfd7e5633195c5dd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
### Setup your environment for tests

The framework used is [PHPUnit](https://phpunit.de/); it can be installed with [Composer](https://getcomposer.org/), which is a dependency management tool.

### Install composer

You can either use:

- a system-wide version, e.g. installed through your distro's package manager (eg. `sudo apt install composer`)
- a local version, downloadable [here](https://getcomposer.org/download/). To update a local composer installation, run `php composer.phar self-update`


#### Install Shaarli dev dependencies

```bash
$ cd /path/to/shaarli
$ composer install
$ composer update
```

#### Install and enable Xdebug to generate PHPUnit coverage reports

See http://xdebug.org/docs/install

For Debian-based distros:
```bash
$ aptitude install php5-xdebug
```
For ArchLinux:
```bash
$ pacman -S xdebug
```

Then add the following line to `/etc/php/php.ini`:
```ini
zend_extension=xdebug.so
```

#### Run unit tests

Successful test suite:
```bash
$ make test

-------
PHPUNIT
-------
PHPUnit 4.6.9 by Sebastian Bergmann and contributors.

Configuration read from /home/virtualtam/public_html/shaarli/phpunit.xml

....................................

Time: 759 ms, Memory: 8.25Mb

OK (36 tests, 65 assertions)
```

Test suite with failures and errors:
```bash
$ make test
-------
PHPUNIT
-------
PHPUnit 4.6.9 by Sebastian Bergmann and contributors.

Configuration read from /home/virtualtam/public_html/shaarli/phpunit.xml

E..FF...............................

Time: 802 ms, Memory: 8.25Mb

There was 1 error:

1) LinkDBTest::testConstructLoggedIn
Missing argument 2 for LinkDB::__construct(), called in /home/virtualtam/public_html/shaarli/tests/Link\
DBTest.php on line 79 and defined

/home/virtualtam/public_html/shaarli/application/LinkDB.php:58
/home/virtualtam/public_html/shaarli/tests/LinkDBTest.php:79

--

There were 2 failures:

1) LinkDBTest::testCheckDBNew
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'e3edea8ea7bb50be4bcb404df53fbb4546a7156e'
+'85eab0c610d4f68025f6ed6e6b6b5fabd4b55834'

/home/virtualtam/public_html/shaarli/tests/LinkDBTest.php:121

2) LinkDBTest::testCheckDBLoad
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'e3edea8ea7bb50be4bcb404df53fbb4546a7156e'
+'85eab0c610d4f68025f6ed6e6b6b5fabd4b55834'

/home/virtualtam/public_html/shaarli/tests/LinkDBTest.php:133

FAILURES!
Tests: 36, Assertions: 63, Errors: 1, Failures: 2.
```

#### Test results and coverage

By default, PHPUnit will run all suitable tests found under the `tests` directory.

Each test has 3 possible outcomes:

- `.` - success
- `F` - failure: the test was run but its results are invalid
    - the code does not behave as expected
    - dependencies to external elements: globals, session, cache...
- `E` - error: something went wrong and the tested code has crashed
    - typos in the code, or in the test code
    - dependencies to missing external elements

If Xdebug has been installed and activated, two coverage reports will be generated:

- a summary in the console
- a detailed HTML report with metrics for tested code
    - to open it in a web browser: `firefox coverage/index.html &`

### Executing specific tests

Add a [`@group`](https://phpunit.de/manual/current/en/appendixes.annotations.html#appendixes.annotations.group) annotation in a test class or method comment:

```php
/**
 * Netscape bookmark import
 * @group WIP
 */
class BookmarkImportTest extends PHPUnit_Framework_TestCase
{
   [...]
}
```

To run all tests annotated with `@group WIP`:
```bash
$ vendor/bin/phpunit --group WIP tests/
```