teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

サンプルコード追加

2019/02/05 15:32

投稿

kezo
kezo

スコア10

title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,93 @@
4
4
  下記ソースコードで一部メソッドのみをモック化しようとしているのですが、うまくいきません。
5
5
  もしご存知の方いらっしゃれば教えていただきたいです。
6
6
  すいませんが宜しくお願い致します。
7
+ 追記
8
+ テストしたいメソッド内でnewでインスタンスを作成しているクラスを一部メソッドをモック化したいのですが、
9
+ どうしても利用している他のメソッドもshouldReceiveをしてモック化しないとダメなのです。
7
10
 
11
+
12
+ 下記はサンプルコードです。
13
+
8
14
  ### 該当のソースコード
9
15
 
16
+ <?php
17
+
18
+ use \Mockery as M;
19
+
20
+ class TestInfo extends TestCase
21
+ {
22
+ private $target;
23
+
24
+
25
+ public function setUp()
26
+ {
27
+ $this->target = m::mock('overload:Info');
28
+
29
+ }
30
+
31
+ public function test_doSomeThing_チェックOK() {
32
+
33
+ $infoUse = new InfoUse();
34
+
35
+ $this->target->shouldReceive('getInfo')->andReturn('成功');
36
+
37
+ $this->assertEquals('成功5', $info->useInfo());
38
+
39
+ }
40
+
41
+ }
42
+ <?php
43
+ テスト対象クラス
44
+
45
+ class InfoUse
46
+ {
47
+
48
+
49
+ public function useInfo(){
50
+ $info = new info();
51
+
52
+ $result = $info->getInfo();
53
+ $result = $result . $info->num();
54
+
55
+ return $result;
56
+ }
57
+
58
+
59
+ }
60
+
61
+ <?php
62
+
63
+ モック化したいクラス
64
+ ※getInfoのみモック化したい
65
+
66
+ class Info
67
+ {
68
+
69
+ public function getInfo(){
70
+ $result =DB::connection('mysql_one')
71
+ ->table('Info')
72
+ ->leftJoin('migrations AS sti', function($join)
73
+ {
74
+ $join->on('Info.id', '=', 'sti.id')
75
+ ->where('sti.migration', '=', '1');
76
+ })
77
+ ->select('*')->toSql();
78
+ return $result;
79
+
80
+ }
81
+
82
+ public function num(){
83
+ $num = 5+2;
84
+
85
+
86
+ return $num;
87
+
88
+ }
89
+
90
+ }
91
+
92
+
93
+
94
+
95
+ 下記方法だとエラーで実行すらされません。
10
- $this->infoMock = m::mock('overload:クラス名[メソッド名]');
96
+ $this->infoMock = m::mock('overload:Ingo[getInfo]');