さまざまな機能を持つ Python コードの Mock モジュールを使用して単体テストを作成する必要があります。
_read_file()
: URL を開き、要素ツリーを使用して xml を解析し、要素ツリー インスタンスを返します。validate_field
: このフィールドは、field_value および order として引数を取ります。
tree.findall
関数を使用しfields_values
てリスト内のすべてを取得し、順序を使用してそのフィールドの正確な値をフィールドに格納します。次に、このファイルは受け取った引数と比較され、比較に基づいて true または false が返されます。
上記の機能の単体テストを作成しました。urllib.urlopen
呼び出された関数の戻り値をモックしましたが、次のようにエラーが発生しています。
IndexError: list index out of range
これについて私を案内してください。
以下のコード:
class test:
def __init__(self, host, service_path='/policy/test.xml'):
self.base_url = 'https://' +host + service_path
self.service_path = service_path
self.host = host
def _read_policy(self, url):
policy_xml = urllib.urlopen(url)
self.tree = ElementTree.parse(policy_xml)
return self.tree
def compare(self, arg1, arg2):
if arg1 == arg2:
return 'true'
else:
return 'false'
def validate_email(self, email, order):
index = int(order) - 1
email_list = self.tree.findall("testList/test/email")
xml_email = email_list[index].text
_resp = self.compare(xml_email, email)
return(_resp)
テストクラス:
class test_validate_email(unittest.TestCase):
def test_validate_email(self):
myMock = Mock( return_value = StringIO.StringIO("""<?xml version="1.0" encoding="utf-8"?><email>*@test.com</email>"""))
urllib.urlopen = myMock
print 'urllib.urlopen', urllib.urlopen()
cp = test(DEFAULT_HOST)
tree = cp._read_policy("some data")
ElementTree.dump(tree)
myMock2 = Mock(return_value = 'true')
_resp = myMock2
print 'test_resp', _resp()
resp = cp.validate_email('*@ashishtest.com','1')
print 'resp', resp
self.assertEqual(resp, 'true')
if __name__ == '__main__':
unittest.main()