質問編集履歴

1

サンプルコード追加

2019/02/05 15:32

投稿

kezo
kezo

スコア10

test CHANGED
File without changes
test CHANGED
@@ -10,10 +10,182 @@
10
10
 
11
11
  すいませんが宜しくお願い致します。
12
12
 
13
+ 追記
14
+
15
+ テストしたいメソッド内でnewでインスタンスを作成しているクラスを一部メソッドをモック化したいのですが、
16
+
17
+ どうしても利用している他のメソッドもshouldReceiveをしてモック化しないとダメなのです。
18
+
19
+
20
+
21
+
22
+
23
+ 下記はサンプルコードです。
24
+
13
25
 
14
26
 
15
27
  ### 該当のソースコード
16
28
 
17
29
 
18
30
 
31
+ <?php
32
+
33
+
34
+
35
+ use \Mockery as M;
36
+
37
+
38
+
39
+ class TestInfo extends TestCase
40
+
41
+ {
42
+
43
+ private $target;
44
+
45
+
46
+
47
+
48
+
49
+ public function setUp()
50
+
51
+ {
52
+
53
+ $this->target = m::mock('overload:Info');
54
+
55
+
56
+
57
+ }
58
+
59
+
60
+
61
+ public function test_doSomeThing_チェックOK() {
62
+
63
+
64
+
65
+ $infoUse = new InfoUse();
66
+
67
+
68
+
69
+ $this->target->shouldReceive('getInfo')->andReturn('成功');
70
+
71
+
72
+
73
+ $this->assertEquals('成功5', $info->useInfo());
74
+
75
+
76
+
77
+ }
78
+
79
+
80
+
81
+ }
82
+
83
+ <?php
84
+
85
+ テスト対象クラス
86
+
87
+
88
+
89
+ class InfoUse
90
+
91
+ {
92
+
93
+
94
+
95
+
96
+
97
+ public function useInfo(){
98
+
99
+ $info = new info();
100
+
101
+
102
+
103
+ $result = $info->getInfo();
104
+
105
+ $result = $result . $info->num();
106
+
107
+
108
+
109
+ return $result;
110
+
111
+ }
112
+
113
+
114
+
115
+
116
+
117
+ }
118
+
119
+
120
+
121
+ <?php
122
+
123
+
124
+
125
+ モック化したいクラス
126
+
127
+ ※getInfoのみモック化したい
128
+
129
+
130
+
131
+ class Info
132
+
133
+ {
134
+
135
+
136
+
137
+ public function getInfo(){
138
+
139
+ $result =DB::connection('mysql_one')
140
+
141
+ ->table('Info')
142
+
143
+ ->leftJoin('migrations AS sti', function($join)
144
+
145
+ {
146
+
147
+ $join->on('Info.id', '=', 'sti.id')
148
+
149
+ ->where('sti.migration', '=', '1');
150
+
151
+ })
152
+
153
+ ->select('*')->toSql();
154
+
155
+ return $result;
156
+
157
+
158
+
159
+ }
160
+
161
+
162
+
163
+ public function num(){
164
+
165
+ $num = 5+2;
166
+
167
+
168
+
169
+
170
+
171
+ return $num;
172
+
173
+
174
+
175
+ }
176
+
177
+
178
+
179
+ }
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+ 下記方法だとエラーで実行すらされません。
190
+
19
- $this->infoMock = m::mock('overload:クラス名[メソッド名]');
191
+ $this->infoMock = m::mock('overload:Ingo[getInfo]');