ОШИБКА: https://www (unittest.loader._FailedTest) во время модульного тестирования - PullRequest
0 голосов
/ 27 марта 2020

В настоящее время пытаюсь написать юнит-тест для определенной функции. Ошибка показана ниже:

E
======================================================================
ERROR: https://www (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute 'https://www'

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)

Хотя сама функция не была вызвана в функции Test, я пытаюсь инициализировать класс Hasher внутри теста. Закомментирование строки инициализации приводит к запуску программы.

class Test(unittest.TestCase): 

def test_YT(self): 
        self.H = Hasher()
        self.assertTrue(True)

Код для класса показан ниже:

class Hasher:

    import hashlib 

    def __init__(self, hash_algo='md5'): 
        print('we getting here')
        # TODO: support for more hash algos
        self.hash_algo = hash_algo 


    def hash_file(self, filename):

        return hashlib.md5(open(filename, 'rb').read()).hexdigest()


    def compare_file_txt(self, filename, hash_txt_file):
        # Useful for when there is an MD5 txt in the folder

        hash1 = self.hash_file(filename)

        if hash1 == open(hash_txt_file).readline():
            return True

        return False


    def YT_create_hash(self, link, output_loc='test_hash.txt'):

        DL = Downloader()
        file_name = DL.YT_extract(link)
        hash_txt = self.hash_file(os.getcwd() + '/' + file_name)
        o_file = open(output_loc, 'w')
        o_file.write(hash_txt)
        o_file.close()

В инициализации класса нет ничего, что указывало бы на использование 'https://www', поэтому не совсем уверен, где эта ошибка идет от.

Мой импорт имеет вид:

from Hasher import *
from Downloader import *

И моя файловая структура сейчас выглядит так:

enter image description here

1 Ответ

1 голос
/ 30 марта 2020

Практически никогда не стоит использовать from my module import *. Это может вызвать конфликты с именами, импортированными из других модулей, ошибки из-за неправильной функции или используемого класса и нежелательные побочные эффекты.
Старайтесь всегда импортировать только необходимые объекты. Используйте инструменты, такие как pylint или flake8, или встроенные подсказки в вашей IDE, чтобы получать уведомления о подобных проблемах.

В этом конкретном случае утверждение from downloader import *, скорее всего, вызвало проблему.

...