Pythonスクリプトの単体テストを書いてみたい。スクリプト自体が正しく実行されます。Python:コマンドライン引数を読み込むクラスをunittestする方法は?
スクリプトは1つのクラスで構成され、コマンドラインから値をクラス変数に読み込みます。
私のテストファイルにクラスをインポートすると、クラスがsys.argv []から読み込んだところで 'リストのインデックスが範囲外です'というエラーが出ます。
私はPythonと一般的にテストするのが初めてです。私はここ数日間、これについて多くのdocとSOのページを読んできました。
import sys
class Bongo:
my_int = int(sys.argv[1])
def __init__(self, n):
self.n = n
def get_sum(self):
return self.n + Bongo.my_int
if __name__ == '__main__':
bongo = Bongo(5)
m = bongo.get_sum()
print('bongo.get_sum() returns {}'.format(m))
ファイルbongo_test.py - -
import unittest
from bongo import Bongo
class TestBongoMethods(unittest.TestCase):
def setUp(self):
self.bongo = Bongo(10)
self.bongo.my_int = 5
def test_get_n(self):
self.assertEqual(self.bongo.get_sum(), 15)
if __name__ == '__main__':
unittest.main()
python bongo_test.py
を実行しているの出力が
Traceback (most recent call last):
File "bongo_test.py", line 2, in <module>
from bongo import Bongo
File "/home/me/class_for_testing/bongo.py", line 4, in <module>
class Bongo:
File "/home/me/class_for_testing/bongo.py", line 6, in Bongo
my_int = int(sys.argv[1])
IndexError: list index out of range
ファイルbongo.py:ここ
コードです私は考えることができるすべてについて試しました。私はPyCharm Pro 2016.1でPy 2.7を使っていましたが、 ですが、結果はPy 3.4を使っても、コマンドラインから実行しても変わりません。
unittestを使用してこれを行うことはできますか?それとも別のものが必要ですか?
ご協力いただければ幸いです。
私はこれがかなり関連していると思います:[私は単体テストできるようにsys.argvを設定するにはどうすればいいですか?](http://stackoverflow.com/questions/18668947/how-do-i-set-sys-argv -so-i-can-unit-test-it) – alecxe