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

0 投票
1 回答
581 浏览
提问于 2025-04-18 03:05

我只是想搞清楚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

总是像这样包裹代码,这样即使你忘记删除测试,也不会有问题。

撰写回答