回答編集履歴
1
追記
answer
CHANGED
@@ -30,17 +30,44 @@
|
|
30
30
|
main()
|
31
31
|
```
|
32
32
|
|
33
|
+
この例では`input()`が`'hoge'`を返すだけの関数に置き換えられています。`return_value`だけでなく、`side_effect`で関数を指定することもできます。詳しくは[ドキュメント](http://docs.python.jp/3/library/unittest.mock.html)をご覧ください。
|
34
|
+
|
35
|
+
## 追記
|
36
|
+
|
37
|
+
なるほどimport時に実行されるコードの副作用ですか。一応できなくはないみたいですが、なんかちょっと危なっかしい気もします。そういうことならsubprocessを使った方法もあながち悪くないかもしれませんね。
|
38
|
+
|
39
|
+
|
40
|
+
```python
|
41
|
+
#wanko.py
|
42
|
+
name = input()
|
43
|
+
print(name,name)
|
33
44
|
```
|
34
|
-
$ python a.py
|
35
|
-
hogehogehoge
|
36
|
-
hogehogehoge hogehogehoge
|
37
45
|
|
46
|
+
```python
|
47
|
+
import sys
|
48
|
+
import io
|
38
|
-
|
49
|
+
import unittest
|
39
|
-
.
|
40
|
-
----------------------------------------------------------------------
|
41
|
-
|
50
|
+
import unittest.mock as mock
|
42
51
|
|
52
|
+
class TestWanko(unittest.TestCase):
|
53
|
+
def setUp(self):
|
54
|
+
self.orig_stdout = sys.stdout
|
55
|
+
sys.stdout = io.StringIO()
|
56
|
+
|
57
|
+
def tearDown(self):
|
58
|
+
sys.stdout = self.orig_stdout
|
59
|
+
if 'wanko' in sys.modules:
|
60
|
+
del sys.modules['wanko']
|
61
|
+
|
62
|
+
@mock.patch('builtins.input', return_value='hoge')
|
63
|
+
def test0(self, *args, **kwarg):
|
43
|
-
|
64
|
+
import wanko
|
65
|
+
self.assertEqual(sys.stdout.getvalue(), 'hoge hoge\n')
|
66
|
+
|
67
|
+
@mock.patch('builtins.input', return_value='wan')
|
68
|
+
def test1(self, *args, **kwarg):
|
69
|
+
import wanko
|
70
|
+
self.assertEqual(sys.stdout.getvalue(), 'wan wan\n')
|
71
|
+
|
72
|
+
unittest.main()
|
44
73
|
```
|
45
|
-
|
46
|
-
この例では`input()`が`'hoge'`を返すだけの関数に置き換えられています。`return_value`だけでなく、`side_effect`で関数を指定することもできます。詳しくは[ドキュメント](http://docs.python.jp/3/library/unittest.mock.html)をご覧ください。
|