這裏有2個小問題。首先,你從錯誤的目錄運行你的測試命令,其次你沒有把你的項目組織得很好。
通常,當我正在開發一個python項目時,我會盡量將所有內容都集中在項目的根目錄下,在您的案例中,這將是hello_python/
。 Python有默認其負載路徑上的當前工作目錄,所以如果你有一個項目是這樣的:
hello_python/
hello/
hello.py
__init__.py
test/
test_hello1.py
test_hello2.py
# hello/hello.py
def do_hello():
return 'hello'
# test/test_hello.py
import unittest2
from hello.hello import do_hello
class HelloTest(unittest2.TestCase):
def test_hello(self):
self.assertEqual(do_hello(), 'hello')
if __name__ == '__main__':
unittest2.main()
其次,test
是不是一個模塊,現在,因爲你已經錯過了在__init__.py
該目錄。你應該有一個看起來像這樣的層次結構:
hello_python/
hello/
hello.py
__init__.py
test/
__init__.py # <= This is what you were missing
test_hello1.py
test_hello2.py
當我嘗試,我的機器上,運行python -m unittest test.hello_test
工作正常,我。
您可能會發現這仍然有點麻煩。我強烈建議安裝nose,這將使您只需從項目的根目錄調用nosetests
即可自動查找並執行所有測試 - 只要您擁有正確的模塊即可使用__init__.py
s。
導入測試與導入任何其他代碼沒有區別。在你的情況下,你會'從hello.hello導入do_hello'。 –
謝謝。我知道了。現在測試在'PyCharm'中運行Ok。但是,當我在當前目錄test下的命令行'python -m unittest test_hello_server'運行測試時,我得到了'ImportError:No module named hello_server.hello_server'。 – Michael
因爲父目錄不在pythonpath上。相反,你應該從'hello_python'開始,並執行'python -m unittest test.test_hello'或其他任何東西。 –