TextTestRunner在pyunit中运行2个测试(在调用一个test_methods时)

时间:2014-04-17 09:01:55

标签: python python-unittest

我只是想了解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 个答案:

答案 0 :(得分: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

总是这样包裹,所以如果忘记删除测试并不重要。