Saya mencoba menulis beberapa unit test dengan metode tertentu yang mengurai elemen berbeda dari XML saya. Tetapi saya mengalami beberapa masalah saat mengurai file xml "test" di unit test saya.

Pertanyaan saya bukan tentang apa pun yang berkaitan dengan file XML/XSD, tetapi hanya seputar cara menguraikannya dengan benar dalam pengujian unit saya.

Ini adalah kode saya sejauh ini:

import unittest
from lxml import etree
from Directory.method_in_class import ClassName #changed the names for security

class TestXmlData(unittest.TestCase):
    def setUp(self):
        self.method_in_class = ClassName()
        XSDDoc = etree.parse("dir/testxsd.xsd")
        rootXSD = XSDDoc.getroot()

    def test_whatever(self):
        # Test whatever

if __name__ == '__main__':
    unittest.main()

Meskipun saya mem-parsing dengan cara yang sama dalam metode implementasi, saya mendapatkan kesalahan di bawah ini:

OSError: Kesalahan membaca file 'dir/testxsd.xsd': gagal memuat entitas eksternal "dir/testxsd.xsd"

Saya telah mencoba beberapa alternatif lain, seperti memuat file dari jawaban ini, tetapi melakukan ini memberi saya kesalahan :

import unittest
from lxml import etree
import os

THIS_DIR = os.path.dirname(os.path.abspath(__file__))

class TestSpecData(unittest.TestCase):
    def setUp(self):
        my_data_path = os.path.join(THIS_DIR, os.pardir, 'dir/testxsd.xsd')
        rootXSD = my_data_path.getroot()

    def test_whatever(self):
        data = sum(1, 2)
        self.assertEqual(data, 3)

if __name__ == '__main__':
    unittest.main()

AttributeError: objek 'str' tidak memiliki atribut 'getroot'

Saya juga telah mencoba jawaban ini, tetapi saya tidak terbiasa dengan Django sehingga mendapatkan banyak kesalahan.

0
Adam 6 Maret 2020, 18:54

1 menjawab

Jawaban Terbaik

Di versi kedua setelah pengeditan, Anda memanggil getroot pada string alih-alih pohon XML yang diurai. Namun, jika Anda mengurai file dengan jalur absolut dengan benar, ini bisa menyelesaikan masalah Anda.

Contoh skema (test.xsd)

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">

    <xs:element name="config" type="xs:string" />

</xs:schema>

Kode python (test.py)

import unittest
from lxml import etree
import os

THIS_DIR = os.path.dirname(os.path.abspath(__file__))

class TestSpecData(unittest.TestCase):
    def setUp(self):
        my_data_path = os.path.join(THIS_DIR, 'data/test.xsd')

        tree = etree.parse(my_data_path)
        root = tree.getroot()

    def test_whatever(self):
        data = sum([1, 2])
        self.assertEqual(data, 3)

if __name__ == '__main__':
    unittest.main()

Keluaran

Dengan asumsi folder test yang berisi test.py, dan bahwa test.xsd ada dalam subfolder bernama data, dan setelah memperbaiki kesalahan dalam pengujian Anda (menambahkan tanda kurung daftar) hasilnya adalah

$ python test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK
1
Mathias Müller 9 Maret 2020, 12:47