Python 单元测试继承设置覆盖
Python unittest inheritance setUp overriding
import unittest
class A(unittest.TestCase):
def setUp(self):
print "Hi it's you",self._testMethodName
def test_one(self):
self.assertEqual(5,5)
def tearDown(self):
print "Bye it's you", self._testMethodName
class B(A,unittest.TestCase):
def setUp(self):
print "Hi it's me", self._testMethodName
def test_two(self):
self.assertNotEqual(5,5)
unittest.main()
输出:
Hi it's you test_one
Bye it's you test_one
.Hi it's me test_one
Bye it's you test_one
.Hi it's me test_two
FBye it's you test_two
======================================================================
FAIL: test_two (__main__.B)
----------------------------------------------------------------------
Traceback (most recent call last):
File "try_test_generators.py", line 19, in test_two
self.assertNotEqual(5,5)
AssertionError: 5 == 5
----------------------------------------------------------------------
Ran 3 tests in 0.005s
FAILED (failures=1)
在上面的代码中,测试用例test_one
使用的是classA的setUp()
。但是在派生的class中使用的是test_one
class B 的 setUp()
。有没有一种方法可以将 A 的 setUp()
用于派生的每个测试用例??。
您可以试试这个代码:
import unittest
class A(unittest.TestCase):
def setUp(self):
print("Hi it's you", self._testMethodName)
def test_one(self):
self.assertEqual(5, 5)
def tearDown(self):
print("Bye it's you", self._testMethodName)
class B(A, unittest.TestCase):
def setUp(self):
test = A()
super(B, B).setUp(test)
def test_two(self):
self.assertNotEqual(5, 5)
if __name__ == '__main__':
unittest.main()
以下是我对此类问题的一些启发:
TypeError: attack() missing 1 required positional argument: 'self'
super() and @staticmethod interaction
只需确保在您覆盖它的每个子 class 中调用 super。
class B(A, unittest.TestCase):
def setUp(self):
print "Hi it's me", self._testMethodName
super(B, self).setUp()
import unittest
class A(unittest.TestCase):
def setUp(self):
print "Hi it's you",self._testMethodName
def test_one(self):
self.assertEqual(5,5)
def tearDown(self):
print "Bye it's you", self._testMethodName
class B(A,unittest.TestCase):
def setUp(self):
print "Hi it's me", self._testMethodName
def test_two(self):
self.assertNotEqual(5,5)
unittest.main()
输出:
Hi it's you test_one
Bye it's you test_one
.Hi it's me test_one
Bye it's you test_one
.Hi it's me test_two
FBye it's you test_two
======================================================================
FAIL: test_two (__main__.B)
----------------------------------------------------------------------
Traceback (most recent call last):
File "try_test_generators.py", line 19, in test_two
self.assertNotEqual(5,5)
AssertionError: 5 == 5
----------------------------------------------------------------------
Ran 3 tests in 0.005s
FAILED (failures=1)
在上面的代码中,测试用例test_one
使用的是classA的setUp()
。但是在派生的class中使用的是test_one
class B 的 setUp()
。有没有一种方法可以将 A 的 setUp()
用于派生的每个测试用例??。
您可以试试这个代码:
import unittest
class A(unittest.TestCase):
def setUp(self):
print("Hi it's you", self._testMethodName)
def test_one(self):
self.assertEqual(5, 5)
def tearDown(self):
print("Bye it's you", self._testMethodName)
class B(A, unittest.TestCase):
def setUp(self):
test = A()
super(B, B).setUp(test)
def test_two(self):
self.assertNotEqual(5, 5)
if __name__ == '__main__':
unittest.main()
以下是我对此类问题的一些启发:
TypeError: attack() missing 1 required positional argument: 'self'
super() and @staticmethod interaction
只需确保在您覆盖它的每个子 class 中调用 super。
class B(A, unittest.TestCase):
def setUp(self):
print "Hi it's me", self._testMethodName
super(B, self).setUp()