我正在學習python,我試圖運行一些簡單的單元測試有一些麻煩。我使用nosetests
來運行一些手動編寫的測試,並且我已經使用Travis持續集成爲我的github存儲庫設置了一些CI實踐。我注意到它沒有爲python 3.x構建所有的版本,但是爲2.x傳遞任何東西。簡單的類失敗nosetests3
首先,這裏是我的兩個文件。
fib.py
#! /usr/bin/python3
#fib.py
import sys
def fib(n):
if (n == 0):
return 0
if (n == 1):
return 1
return fib(n -1) + fib(n - 2)
def main():
if (len(sys.argv) == 2):
print(fib(sys.argv[1]))
else:
print("Usage: ", sys.argv[0], " [number]")
if __name__ == "__main__":
main()
test_fib.py
#! /usr/bin/python3
#testfib.py
import unittest
from fib import fib
class TestFib(unittest.TestCase):
def test_fib_0(self):
self.assertEqual(fib(0), 0)
def test_fib_1(self):
self.assertEqual(fib(1), 1)
def test_fib_2(self):
self.assertEqual(fib(2), 1)
def test_fib_range(self):
for x in range(2,13):
self.assertEqual(fib(x), fib(x - 1) + fib(x - 2))
if __name__ == "__main__":
unittest.main()
運行python test_fib.py
:
....
----------------------------------------------------------------------
Ran 4 tests in 0.018s
OK
運行nosetests
....
----------------------------------------------------------------------
Ran 4 tests in 0.053s
OK
[email protected]:~/dev/Projects/Numbers/fib$
然而,當我部署到特拉維斯CI和運行nosetests
與python3.x,或者我在我的機器上運行nosetests3
,我看到:
EEEE
======================================================================
ERROR: test_fib_0 (fib.test_fib.TestFib)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/pi/dev/Projects/Numbers/fib/test_fib.py", line 9, in test_fib_0
self.assertEqual(fib(0), 0)
TypeError: 'module' object is not callable
======================================================================
ERROR: test_fib_1 (fib.test_fib.TestFib)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/pi/dev/Projects/Numbers/fib/test_fib.py", line 12, in test_fib_1
self.assertEqual(fib(1), 1)
TypeError: 'module' object is not callable
======================================================================
ERROR: test_fib_2 (fib.test_fib.TestFib)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/pi/dev/Projects/Numbers/fib/test_fib.py", line 15, in test_fib_2
self.assertEqual(fib(2), 1)
TypeError: 'module' object is not callable
======================================================================
ERROR: test_fib_range (fib.test_fib.TestFib)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/pi/dev/Projects/Numbers/fib/test_fib.py", line 19, in test_fib_range
self.assertEqual(fib(x), fib(x - 1) + fib(x - 2))
TypeError: 'module' object is not callable
----------------------------------------------------------------------
Ran 4 tests in 0.034s
FAILED (errors=4)
我很新的蟒蛇,所以我米不知道我的問題是與我的代碼或我如何使用鼻子。關於我在做什麼的任何想法都是錯誤的?
這裏是一切的版本我跑:
$ python -V
Python 2.7.3
$ python3 -V
Python 3.2.3
$ nosetests -V
nosetests version 1.3.0
$ nosetests3 -V
nosetests3 version 1.1.2
$ cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux 7 (wheezy)"
NAME="Debian GNU/Linux"
VERSION_ID="7"
VERSION="7 (wheezy)"
ID=debian
ANSI_COLOR="1;31"
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support/"
BUG_REPORT_URL="http://bugs.debian.org/"
fib.py和test_fib.py在同一個目錄下嗎? –
是的,連同一個空的\ _ \ _ init \ _ \ _。py,nosetests顯然無法正常工作。 – sjotterman
如果您在py3上安裝了另一個fib軟件包,則可能需要'from .fib import fib'。 – kalhartt