python unittest 防止抽象 testBase class 测试自身
python unittest prevent abstract testBase class test itself
我有:
我有一个 TestBase.py
用作抽象测试 class。
from abc import abstractmethod
class TestBase:
expectData = None
def test_check_expectData(self):
if self.expectData is None:
raise NotImplementedError('you must have expectData')
@abstractmethod
def test_command_OK(self):
raise NotImplementedError('subclasses must override test_command()!')
我想让别人继承TestBase
。例如 TestDemo.py
import unittest
from TestBase import TestBase
class TestDemo(unittest.TestCase, TestBase):
expectData = ["someData"]
def test_command_OK(self):
self.assertTrue(True)
if __name__ =='__main__':
unittest.main()
如果我 运行 python TestDemo.py
一切正常。如果我没有 expectedDate 我会得到一个 NotImplementedError
如果我没有 test_command_OK
方法我会得到一个 NotImplementedError: subclasses must override test_command()!
问题:
当我 运行 来自 setup.py python setup.py test
的测试套件出现问题时。我认为 setup.py 的原因是 运行 单独 TestBase
class 而 TestBase
class expectedData
是 None
所以它没有通过测试。
====================================================================== ERROR: myProject.tests.TestDemo.TestBase.test_check_expectData
---------------------------------------------------------------------- Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg) File "/Users/z002x6m/Desktop/myProject/tests/TestBase.py", line 49, in test_check_expectData
if self.expectData is None: AttributeError: TestBase instance has no attribute 'expectData'
====================================================================== ERROR: myProject.tests.TestDemo.TestBase.test_command_OK
---------------------------------------------------------------------- Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg) File "/Users/z002x6m/Desktop/myProject/tests/TestBase.py", line 57, in test_command_OK
raise NotImplementedError('subclasses must override test_command()!') NotImplementedError: subclasses must override test_command()!
如果我在 test_check_expectData(self)
方法中打印出 print(self.__class__)
,当我直接 运行 TestDemo 时我会得到 <class '__main__.TestDemo'>
,这时一切正常。我得到 myProject.tests.TestDemo.TestBase
当我 运行 python setup.py test
.
有没有办法让我告诉setup.py
不要运行TestBase
class?也许 @unittest.skipis , @unittest.skipif, @unittest.skipunless
?但我不希望 subclass 跳过这些要求测试,因为我希望所有 subclass 都有 expectData。 TestBase 旨在用作模板,force/check 子测试 classes 具有 expectData
等所有要求。但它本身不应该是 运行。我该怎么做才能解决这个问题?我不介意建议,即使这意味着重新构建我当前的测试框架
显然,使用 SkipTest 会跳过测试 if subclass super()
the TestBase
class
from unittest.case import SkipTest
def test_check_expectData(self):
if self.expectData is None:
raise SkipTest
我有:
我有一个 TestBase.py
用作抽象测试 class。
from abc import abstractmethod
class TestBase:
expectData = None
def test_check_expectData(self):
if self.expectData is None:
raise NotImplementedError('you must have expectData')
@abstractmethod
def test_command_OK(self):
raise NotImplementedError('subclasses must override test_command()!')
我想让别人继承TestBase
。例如 TestDemo.py
import unittest
from TestBase import TestBase
class TestDemo(unittest.TestCase, TestBase):
expectData = ["someData"]
def test_command_OK(self):
self.assertTrue(True)
if __name__ =='__main__':
unittest.main()
如果我 运行 python TestDemo.py
一切正常。如果我没有 expectedDate 我会得到一个 NotImplementedError
如果我没有 test_command_OK
方法我会得到一个 NotImplementedError: subclasses must override test_command()!
问题:
当我 运行 来自 setup.py python setup.py test
的测试套件出现问题时。我认为 setup.py 的原因是 运行 单独 TestBase
class 而 TestBase
class expectedData
是 None
所以它没有通过测试。
====================================================================== ERROR: myProject.tests.TestDemo.TestBase.test_check_expectData
---------------------------------------------------------------------- Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg) File "/Users/z002x6m/Desktop/myProject/tests/TestBase.py", line 49, in test_check_expectData
if self.expectData is None: AttributeError: TestBase instance has no attribute 'expectData'
====================================================================== ERROR: myProject.tests.TestDemo.TestBase.test_command_OK
---------------------------------------------------------------------- Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg) File "/Users/z002x6m/Desktop/myProject/tests/TestBase.py", line 57, in test_command_OK
raise NotImplementedError('subclasses must override test_command()!') NotImplementedError: subclasses must override test_command()!
如果我在 test_check_expectData(self)
方法中打印出 print(self.__class__)
,当我直接 运行 TestDemo 时我会得到 <class '__main__.TestDemo'>
,这时一切正常。我得到 myProject.tests.TestDemo.TestBase
当我 运行 python setup.py test
.
有没有办法让我告诉setup.py
不要运行TestBase
class?也许 @unittest.skipis , @unittest.skipif, @unittest.skipunless
?但我不希望 subclass 跳过这些要求测试,因为我希望所有 subclass 都有 expectData。 TestBase 旨在用作模板,force/check 子测试 classes 具有 expectData
等所有要求。但它本身不应该是 运行。我该怎么做才能解决这个问题?我不介意建议,即使这意味着重新构建我当前的测试框架
显然,使用 SkipTest 会跳过测试 if subclass super()
the TestBase
class
from unittest.case import SkipTest
def test_check_expectData(self):
if self.expectData is None:
raise SkipTest