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

質問編集履歴

4

試したことを追記してみました

2018/04/09 02:23

投稿

nakamiri
nakamiri

スコア7

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- ### 前提・実現したいこと
1
+ ## 前提・実現したいこと
2
2
 
3
3
  [26.6.3.4. Applying the same patch to every test method](https://docs.python.org/3/library/unittest.mock-examples.html#applying-the-same-patch-to-every-test-method)
4
4
  上記ドキュメントを参考に、全てのテストメソッドに同じpatchを当てた状態のインスタンスを`setUp`内で生成して、
@@ -7,7 +7,7 @@
7
7
  この時にMockオブジェクトに想定のものが上手く反映されず、
8
8
  どのように使ったらよいか教えてもらえませんでしょうか。
9
9
 
10
- ### 発生している問題・エラーメッセージ
10
+ ## 発生している問題・エラーメッセージ
11
11
 
12
12
  `setUp`内で`pather.start()`で返されるMockオブジェクトに対して、
13
13
  以下のように設定をした場合、`patch`を当てたクラスの方では想定のMockオブジェクトではなく、
@@ -38,7 +38,7 @@
38
38
  return "{0}-{1}".format(section, option)
39
39
 
40
40
  def test_test(self):
41
- a = self.bigip_base
41
+ a = self.hoge
42
42
 
43
43
  # 何かする
44
44
  ```
@@ -58,19 +58,76 @@
58
58
  self.host = conf.get('settings', 'host')
59
59
  self.user = conf.get('settings', 'user')
60
60
  self.pwd = conf.get('settings', 'pwd')
61
+ self.flag = conf.getboolean('settings', 'flag')
62
+ self.port = conf.getint('settings', 'port')
61
63
 
62
64
  def nanka_method(self):
63
65
  # ...
64
66
 
65
67
  ```
66
68
 
67
- ### 試したこと
69
+ ## 試したこと
68
70
 
69
71
  関数に対しての`patch`は上手くできていました。
70
72
  他に色々パスを変えたりなどして試してみたのですが、全てうまく行かなかった形でした。
71
73
  やり方問わずテストケース全体にカジュアルにMockを当てた状態の初期化されたインスタンスを使う方法があれば、
72
74
  そちらのやり方でも構いませんので教えて頂けるとありがたいです。
73
75
 
76
+ ### 試したこと1
77
+ `test_hoge.py` のコンストラクタ内で以下のようなコードでのMockへの値追加も試しましたが、変わらずでした
78
+ ```python
79
+ # test_hoge.py:__init__
80
+ ConfigParser.get = mock.MagicMock(side_effect=self._side_effect)
81
+ ConfigParser.getboolean.return_value = False
82
+ ConfigParser.getint.return_value = 5
83
+ ```
84
+
85
+ ### 試したこと2
86
+ 関数へのMockは以下のような形でやって上手く行っていました。
87
+ ```python
88
+ # test_hoge.py
89
+ from unittest import TestCase, mock
90
+ from libs.hoge import Hoge
91
+
92
+ def _side_effect(self, section, option):
93
+ return "{0}-{1}".format(section, option)
94
+
95
+ class TestHoge(TestCase):
96
+
97
+ @mock.patch('libs.hoge.ConfigParser.get', side_effect=_side_effect)
98
+ @mock.patch('libs.hoge.ConfigParser.getboolean', return_value=False)
99
+ @mock.patch('libs.hoge.ConfigParser.getint', return_value=5)
100
+ def test_test(self):
101
+ a = Hoge()
102
+
103
+ # 何かする
104
+ ```
105
+
106
+ ### 試したこと3
107
+ 関数へのMockですが、この形だと上手く入りませんでした
108
+ 初期化のタイミングが異なるとかなのでしょうか...?
109
+
110
+ ```python
111
+ # test_hoge.py
112
+ from unittest import TestCase, mock
113
+ from libs.hoge import Hoge
114
+
115
+ def _side_effect(self, section, option):
116
+ return "{0}-{1}".format(section, option)
117
+
118
+ class TestHoge(TestCase):
119
+
120
+ @mock.patch('libs.hoge.ConfigParser')
121
+ def test_test(self, parser):
122
+ parser.get = mock.MagicMock(side_effect=_side_effect)
123
+ conf_parser.getboolean.return_value = False
124
+ conf_parser.getin.return_value = 5
125
+
126
+ a = Hoge()
127
+
128
+ # 何かする
129
+ ```
130
+
74
131
  ### 補足情報(FW/ツールのバージョンなど)
75
132
 
76
133
  * PyCharm CE 2016.3

3

OS追加しました

2018/04/09 02:23

投稿

nakamiri
nakamiri

スコア7

title CHANGED
File without changes
body CHANGED
@@ -74,4 +74,5 @@
74
74
  ### 補足情報(FW/ツールのバージョンなど)
75
75
 
76
76
  * PyCharm CE 2016.3
77
- * Python 3.6.5
77
+ * Python 3.6.5
78
+ * macOS Sierra 10.12.6

2

Python初心者なものでアイコン付けました

2018/04/06 13:53

投稿

nakamiri
nakamiri

スコア7

title CHANGED
File without changes
body CHANGED
File without changes

1

ソースコードにコメント追加しました

2018/04/06 13:51

投稿

nakamiri
nakamiri

スコア7

title CHANGED
File without changes
body CHANGED
@@ -51,6 +51,7 @@
51
51
  class Hoge(object):
52
52
 
53
53
  def __init__(self):
54
+ # このコードで実行するとMagicMockが↑で挙動を入れたものではない、新規のが入ってくるように見える
54
55
  conf = ConfigParser()
55
56
  conf.read(CONFIG_PATH)
56
57