测试
Boehm Curve
[图片Boehm_Curve.jpg 来自
我的Instagram]
你发现bug的时间越晚,修改它所需付出的代价也就越大,所以尽早捕获到bug将会降低总体时间。
1
# notes.py
'''Function for working with temperature.'''
def to_celsius(t):
'''Convert Fahrenheit to Celsius.'''
return round((t - 32.0) * 5.0 / 9.0)
def above_freezing(t):
'''True if temperature in Celsius is above freezing, False otherwise.'''
return t > 0
# test_notes.py
import nose
from notes import to_celsius
#from notes import above_freezing
def test_to_celsius():
'''Test function for to_celsius'''
assert to_celsius(100) == 37.8, 'Returning an unrounded result'
if __name__ == '__main__':
nose.runmodule()
Python Shell:
[evaluate test_notes.py]
F
======================================================================
FAIL: Test function for to_celsius
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\nose-1.2.1-py2.7.egg\nose\case.py", line 197, in runTest
self.test(*self.arg)
File "<wingdb_compile>", line 9, in test_to_celsius
AssertionError: Returning an unrounded result
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (failures=1)
Traceback (most recent call last):
File "D:\Program Files\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 34, in <module>
File "C:\Python27\Lib\site-packages\nose-1.2.1-py2.7.egg\nose\core.py", line 292, in runmodule
main(defaultTest=name, **kw)
File "C:\Python27\Lib\site-packages\nose-1.2.1-py2.7.egg\nose\core.py", line 118, in __init__
**extra_args)
File "C:\Python27\Lib\unittest\main.py", line 95, in __init__
self.runTests()
File "C:\Python27\Lib\site-packages\nose-1.2.1-py2.7.egg\nose\core.py", line 200, in runTests
sys.exit(not self.success)
SystemExit: True
F
======================================================================
FAIL: Test function for to_celsius
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\nose-1.2.1-py2.7.egg\nose\case.py", line 197, in runTest
self.test(*self.arg)
File "<wingdb_compile>", line 9, in test_to_celsius
AssertionError: Returning an unrounded result
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (failures=1)
Traceback (most recent call last):
File "D:\Program Files\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 34, in <module>
File "C:\Python27\Lib\site-packages\nose-1.2.1-py2.7.egg\nose\core.py", line 292, in runmodule
main(defaultTest=name, **kw)
File "C:\Python27\Lib\site-packages\nose-1.2.1-py2.7.egg\nose\core.py", line 118, in __init__
**extra_args)
File "C:\Python27\Lib\unittest\main.py", line 95, in __init__
self.runTests()
File "C:\Python27\Lib\site-packages\nose-1.2.1-py2.7.egg\nose\core.py", line 200, in runTests
sys.exit(not self.success)
SystemExit: True
2
# test_notes.py
import nose
#from notes import to_celsius
from notes import above_freezing
def test_above_freezing():
'''Test function for above_freezing.'''
assert above_freezing(89.4), 'A temperature above freezing.'
assert not above_freezing(-42), 'A temperature below freezing.'
assert not above_freezing(0), 'A temperature at freezing.'
if __name__ == '__main__':
nose.runmodule()
Python Shell:
[evaluate test_notes.py]
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Traceback (most recent call last):
File "D:\Program Files\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 34, in <module>
File "C:\Python27\Lib\site-packages\nose-1.2.1-py2.7.egg\nose\core.py", line 292, in runmodule
main(defaultTest=name, **kw)
File "C:\Python27\Lib\site-packages\nose-1.2.1-py2.7.egg\nose\core.py", line 118, in __init__
**extra_args)
File "C:\Python27\Lib\unittest\main.py", line 95, in __init__
self.runTests()
File "C:\Python27\Lib\site-packages\nose-1.2.1-py2.7.egg\nose\core.py", line 200, in runTests
sys.exit(not self.success)
SystemExit: False
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Traceback (most recent call last):
File "D:\Program Files\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 34, in <module>
File "C:\Python27\Lib\site-packages\nose-1.2.1-py2.7.egg\nose\core.py", line 292, in runmodule
main(defaultTest=name, **kw)
File "C:\Python27\Lib\site-packages\nose-1.2.1-py2.7.egg\nose\core.py", line 118, in __init__
**extra_args)
File "C:\Python27\Lib\unittest\main.py", line 95, in __init__
self.runTests()
File "C:\Python27\Lib\site-packages\nose-1.2.1-py2.7.egg\nose\core.py", line 200, in runTests
sys.exit(not self.success)
SystemExit: False
有3条assert语句,但是Nose还是认为只运行了一个测试。对Nose而言,每个函数就是一个测试。
如果test_above_freezing中的第一个测试就失败了,我们将无法得到其他测试的任何信息。因此,
通常的做法是编写许多小的测试函数,分别测试少量的东西,而不是在其中放上一大堆各种各样的断言。