2

さまざまな機能を持つ 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()
4

0 に答える 0