簡體   English   中英

無法在python單元測試中運行代碼

[英]Unable to run code inside python unit test

嘗試為 python3 腳本編寫單元測試時遇到問題。 該代碼在測試定義內運行時拋出 AttributeError ,但如果我在測試定義類之外的同一文件中運行相同的代碼,則不會。

編碼:

class TestDataCleaningMethods(unittest.TestCase):
    def test_one(self):
        data = pd.DataFrame(columns=[
            'categoryId',
            'regionId',
            'districtId',
            'jobType',
            'contractType',
            'payType'])
        result = service.__columns_to_snake_case(data)

拋出以下錯誤:

AttributeError: module 'service' has no attribute '_TestDataCleaningMethods__columns_to_snake_case'

我搜索了一下,發現了一些關於 unittest 屬性錯誤的問題和答案,但沒有看到任何與此問題完全匹配的問題和答案。


另一件需要注意的事情是,我已經使用 Monkey-patched import來返回 Mocks,但我看不到它干擾了 unittest 的功能。 為了完整起見,這是代碼:

orig_import = __import__

original_imports = [
    "service",
    "pandas"
]

def import_mock(name, *args):
    if name in original_imports:
        print(f"Using original imports for {name}")
        return orig_import(name, *args)
    print(f"Mocking {name}")
    return mock.MagicMock()


with mock.patch('builtins.__import__', side_effect=import_mock):
    import service

任何幫助是極大的贊賞

解決了,原來是函數名中雙下划線的問題。 雙下划線使 python 解釋器重命名屬性以防止沖突。 更改函數名稱以刪除雙下划線可解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM