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 |
||
12 | final class DateTimeTest extends TestCase |
||
13 | { |
||
14 | /** |
||
15 | * Verify basic usage of filter(). |
||
16 | * |
||
17 | * @test |
||
18 | * @covers ::filter |
||
19 | * |
||
20 | * @return void |
||
21 | */ |
||
22 | public function filter() |
||
29 | |||
30 | /** |
||
31 | * Verify behavior of filter() when $value is an integer. |
||
32 | * |
||
33 | * @test |
||
34 | * @covers ::filter |
||
35 | * |
||
36 | * @return void |
||
37 | */ |
||
38 | public function filterTimestamp() |
||
45 | |||
46 | /** |
||
47 | * Verify behavior of filter() when $value is a string with only whitespace. |
||
48 | * |
||
49 | * @test |
||
50 | * @covers ::filter |
||
51 | * @expectedException \TraderInteractive\Filter\Exception |
||
52 | * @expectedExceptionMessage $value is not a non-empty string |
||
53 | * |
||
54 | * @return void |
||
55 | */ |
||
56 | public function filterEmptyValue() |
||
60 | |||
61 | /** |
||
62 | * Verify behavior of filter() when $value is not a string or integer. |
||
63 | * |
||
64 | * @test |
||
65 | * @covers ::filter |
||
66 | * @expectedException \TraderInteractive\Filter\Exception |
||
67 | * @expectedExceptionMessage $value is not a non-empty string |
||
68 | * |
||
69 | * @return void |
||
70 | */ |
||
71 | public function filterInvalidValue() |
||
75 | |||
76 | /** |
||
77 | * Verify behavior of filter() when null is given for $value and $allowNull is true. |
||
78 | * |
||
79 | * @test |
||
80 | * @covers ::filter |
||
81 | */ |
||
82 | public function filterNullAllowed() |
||
86 | |||
87 | /** |
||
88 | * Verify behavior of filter() when null is given for $value and $allowNull is true. |
||
89 | * |
||
90 | * @test |
||
91 | * @covers ::filter |
||
92 | * @expectedException \TraderInteractive\Filter\Exception |
||
93 | * @expectedExceptionMessage $value is not a non-empty string |
||
94 | */ |
||
95 | public function filterNullNotAllowed() |
||
99 | |||
100 | /** |
||
101 | * Verify behavior of filter() when $value is a \DateTime object. |
||
102 | * |
||
103 | * @test |
||
104 | * @covers ::filter |
||
105 | */ |
||
106 | public function filterDateTimePass() |
||
111 | |||
112 | /** |
||
113 | * Verify behavior of filter() when $timezone is given. |
||
114 | * |
||
115 | * @test |
||
116 | * @covers ::filter |
||
117 | */ |
||
118 | View Code Duplication | public function filterWithTimeZone() |
|
125 | |||
126 | /** |
||
127 | * Verify behavior of filter() when $value is an integer. |
||
128 | * |
||
129 | * @test |
||
130 | * @covers ::filter |
||
131 | */ |
||
132 | public function filterWithIntegerValue() |
||
138 | |||
139 | /** |
||
140 | * Verify basic behavior of format(). |
||
141 | * |
||
142 | * @test |
||
143 | * @covers ::format |
||
144 | */ |
||
145 | public function format() |
||
150 | } |
||
151 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.