簡體   English   中英

使用具有多個子類的baseclass時,ImportError無法導入名稱

[英]ImportError cannot import name when using baseclass with multiple subclasses

我需要有一個運行setup / teardown的基類,然后是繼承的子類,以便允許所有測試運行,無論某些測試是否失敗。 當試圖有多個導入基類的子類時,我看到第二個子類的導入錯誤。 我有以下文件: runtestcases.py testcase1.py testcase2.py

這是runtestcases.py:

import unittest
import testcase1, testcase2

class ArithTestSuper (unittest.TestCase):

def setUp (self):
    print("Setting up ArithTest cases")

def tearDown (self):
    print("Cleaning up ArithTest cases")


def my_suite():

suite = unittest.TestSuite()

suite.addTest (testcase1.ArithTest())
suite.addTest (testcase2.ArithTestFail())

return suite


if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    test_suite = my_suite()
    runner.run (test_suite)   

這是testcase1.py:

from runtestcases import ArithTestSuper

class ArithTest (ArithTestSuper):

def runTest (self):
    """ Test addition and succeed. """
    print("Running ArithTest")
    self.failUnless (1+1==2, 'one plus one fails!')
    self.failIf (1+1 != 2, 'one plus one fails again!')
    self.failUnlessEqual (1+1, 2, 'more trouble with one plus one!')

這是testcase2.py:

from runtestcases import ArithTestSuper

class ArithTestFail (ArithTestSuper):

def runTest (self):
    """ Test addition and fail. """
    print("Running ArithTestFail")
    self.failUnless (1+1==2, 'one plus one fails!')
    self.failIf (1+1 != 2, 'one plus one fails again!')
    self.failUnlessEqual (1+1, 2, 'more trouble with one plus one!')
    self.failIfEqual (1+1, 2, 'expected failure here')
    self.failIfEqual (1+1, 2, 'second failure')  


Compilation fails on testcase2.py with:
ImportError: cannot import name ArithTestSuper

如果我只運行testcase1它也可以運行 - 同樣,只運行testcase2。 如果我嘗試這兩個錯誤發生。 思考?

這是循環導入的問題。 將基類移出您運行的模塊。

要回答你的第二個問題( https://stackoverflow.com/a/12885312/1745627 ):避免覆蓋runTest方法; 它由unittest框架調用,基本上可以運行你的測試用例。 使用命令約定(如test_xxx實現自己的測試方法(unittest查找以test開始執行的方法)。

暫無
暫無

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

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