TextTestRunner在pyunit中运行2个测试(当一个被调用时)
我只是想搞清楚unittest的子类和方法是怎么工作的。在下面的代码中,我只想运行test_add这个方法,而不想运行test_sub。有人能告诉我我哪里做错了吗?因为输出结果显示这两个方法都被执行了:
import unittest
def add(a,b):
x=a+b
return x
def sub(x,y):
z=x-y
return z
class addnum():
def calladd(self, a, b):
sum1 = add(a, b)
return sum1
def callsub(self,x,y):
diff = sub(x , y)
print "subtraction succ"
return diff
class test(addnum, unittest.TestCase):
def setup(self):
pass
def teardown(self):
pass
def test_add(self):
a1=addnum()
if a1.calladd(1, 2) ==3:
print "add successful"
assert addnum().calladd(1,2) == 3
def test_sub(self):
assert addnum().callsub(5, 3) == 2
print "abc"
#suite = unittest.TestSuite()
#suite.addTest(test('test_add'))
runner = unittest.TextTestRunner(verbosity=2)
runner.run(test(methodName='test_add'))
输出结果如下:
Finding files... done.
Importing test modules ... add successful
done.
add successful
subtraction succ
abc
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
test_add (trial2.test) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
请帮帮我。我承认我现在的知识还很有限。
1 个回答
1
首先,你不应该把那些代码放在模块的最后面。否则,每次你导入这个模块的时候,这个测试都会被执行。你应该把它包裹起来,像这样:
if __name__ == "__main__":
#suite = unittest.TestSuite()
#suite.addTest(test('test_add'))
runner = unittest.TextTestRunner(verbosity=2)
runner.run(test(methodName='test_add'))
这样一来,只有当这个.py模块单独被调用时,你的代码才会运行,而不是在被导入的时候。这样做似乎效果很好,只会运行你想要的测试。
test_add (__main__.test) ... ok
add successful
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
总是像这样包裹代码,这样即使你忘记删除测试,也不会有问题。