自动创建测试用例

时间:2016-03-29 12:49:31

标签: python unit-testing nose

我正在尝试自动创建测试用例并通过nosetest运行它们。

使用命令运行时,测试运行正常: python -m unittest test_auto1 python -m unittest test_auto1.TestAuto.test_two

但是,如果我尝试使用nosetest运行测试,则在某些情况下会失败:

1)nosetests test_auto1 - 因错误而失败
 2)nosetests test_auto1:TestAuto - 工作正常
 3)nosetests test_auto1:TestAuto.test_one - 失败并出现错误

这是测试代码:

import unittest

def generator(test_class, a, b):
    def test(self):
        self.assertEqual(a, b)
    return test

def add_test_methods(test_class):
    #First element of list is variable "a", then variable "b", then name of test case that will be used as suffix.
    test_list = [[2,3, 'one'], [5,5, 'two'], [0,0, 'three']]
    for case in test_list:
        test = generator(test_class, case[0], case[1])
        setattr(test_class, "test_%s" % case[2], test)


class TestAuto(unittest.TestCase):
    def setUp(self):
        print 'Setup'
        pass

    def tearDown(self):
        print 'TearDown'
        pass

add_test_methods(TestAuto)

if __name__ == '__main__':
    unittest.main(verbosity=1)

运行单个测试时的错误是:

======================================================================
ERROR: Failure: ValueError (no such test method in <class 'test_auto2.TestAuto'>: test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\nose-1.3.1-py2.7.egg\nose\loader.py", line 516, in makeTest
    return self._makeTest(obj, parent)
  File "C:\Python27\lib\site-packages\nose-1.3.1-py2.7.egg\nose\loader.py", line 570, in _makeTest
    return parent(obj.__name__)
  File "C:\Python27\lib\unittest\case.py", line 189, in __init__
    (self.__class__, methodName))
ValueError: no such test method in <class 'test_auto2.TestAuto'>: test

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)

1 个答案:

答案 0 :(得分:1)

我看到的唯一问题是,nottest很可能被解释为测试。当我将其标记为from nose.tools import nottest @nottest def add_test_methods(test_class): .... 时,上述相同的代码按预期运行:

nosetests -v 
test_one (auto.TestAuto) ... FAIL
test_three (auto.TestAuto) ... ok
test_two (auto.TestAuto) ... ok

======================================================================
FAIL: test_one (auto.TestAuto)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/opikalo/src/nose/auto.py", line 7, in test
    self.assertEqual(a, b)
AssertionError: 2 != 3
-------------------- >> begin captured stdout << ---------------------
Setup

--------------------- >> end captured stdout << ----------------------

----------------------------------------------------------------------
Ran 3 tests in 0.001s

FAILED (failures=1)

现在正在运行它:

{...}