Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | <?php |
||
8 | class Test extends \PHPUnit\Framework\TestCase |
||
|
|||
9 | { |
||
10 | /** @test */ |
||
11 | public function emptyPassword() |
||
19 | |||
20 | /** @test */ |
||
21 | View Code Duplication | public function letterPasswordOnly() |
|
1 ignored issue
–
show
|
|||
22 | { |
||
23 | $pw = new Password(); |
||
24 | |||
25 | $pw->addCriteria(new Dictionaries\Letter(), new Occurrences\Strict(10)); |
||
26 | |||
27 | $str = $pw->generate(); |
||
28 | |||
29 | $this->assertNotEmpty($str); |
||
30 | |||
31 | $this->assertRegExp('/[a-z]/', $str); |
||
32 | } |
||
33 | |||
34 | /** @test */ |
||
35 | public function alphanumericPasswordOnly() |
||
51 | |||
52 | /** @test */ |
||
53 | View Code Duplication | public function accentedLetterOnly() |
|
69 | |||
70 | /** @test */ |
||
71 | View Code Duplication | public function accentedUppercaseLetterOnly() |
|
87 | |||
88 | /** @test */ |
||
89 | public function specialCharacterOnly() |
||
109 | |||
110 | /** @test */ |
||
111 | public function longDigitFormatOnly() |
||
123 | |||
124 | /** @test */ |
||
125 | View Code Duplication | public function smallAlphanumericFormatOnly() |
|
139 | |||
140 | /** @test */ |
||
141 | View Code Duplication | public function strongAlphanumericFormatOnly() |
|
155 | |||
156 | /** @test */ |
||
157 | public function mixedStrongFormatOnly() |
||
171 | |||
172 | /** @test */ |
||
173 | public function mixedComplexFormatOnly() |
||
187 | |||
188 | |||
189 | /** @test */ |
||
190 | View Code Duplication | public function digitPasswordOnly() |
|
1 ignored issue
–
show
|
|||
191 | { |
||
192 | $pw = new Password(); |
||
193 | |||
194 | $pw->addCriteria(new Dictionaries\Digit(), new Occurrences\Strict(10)); |
||
195 | |||
196 | $str = $pw->generate(); |
||
197 | |||
198 | $this->assertNotEmpty($str); |
||
199 | |||
200 | $this->assertRegExp('/\d{10}/', $str); |
||
201 | } |
||
202 | |||
203 | /** @test */ |
||
204 | public function strictOccurrences() |
||
218 | |||
219 | /** @test */ |
||
220 | public function betweenOccurrences() |
||
233 | |||
234 | /** @test */ |
||
235 | public function perfectScore() |
||
248 | } |
||
249 |
You can fix this by adding a namespace to your class:
When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.