我有课,我需要测试它
class ToBeTested():
def my_method():
pass
我在python中设计了一些单元测试。
import unittest
class MyFirstUnitTest(unittest.TestCase):
def setUp(self):
# prepare some data
# run a method
# collect results
def test_one_assumption_about_results(self):
#self.assertEqual(...)
def test_another_assumption_about_results(self):
#self.assertEqual(...)
if __name__ == '__main__':
unittest.main()
我已经设计了这个代码来查看示例。
现在我不明白如何将测试类MyFirstUnitTest
与要测试的classe ToBeTested
联系起来?
继承?
class MyFirstUnitTest(unittest.TestCase,ToBeTested):
######
通过创建类ToBeTested
的对象作为静态成员
MyFirstUnitTest
类定义?
class MyFirstUnitTest(unittest.TestCase):
mytestobj=ToBeTested()
def setUp(self):
通过在每个测试中创建类ToBeTested
的对象
MyFirstUnitTest
类定义的案例?
class MyFirstUnitTest(unittest.TestCase):
def setUp(self):
###
def test_one():
mytestobj=ToBeTested()
def test_two():
mytestobj=ToBeTested()
请建议替代方案以及为什么您更喜欢其中任何一种
答案 0 :(得分:1)
如果不需要重新实例化,您可以在设置中创建类的实例 如果您必须在每个测试中创建一个新实例,那么只需在每个测试中创建一个新实例。
答案 1 :(得分:1)
使用继承和静态成员而不是为每个测试创建一个新对象有一个缺点:如果测试更改了对象的状态,那么测试会以副作用相互影响。如果测试方法调用的顺序无法保证和更改(例如,您重命名测试并且突然不同的测试用例失败 - 这些事情以前发生过!)
此外,让您的测试用例继承自SUT(受测试的主题)意味着您只能测试一个构造函数。
我认为测试用例继承自SUT没有任何好处,特别是在没有私有成员的python中。如果由于某种原因继承对于测试是必要的(有时候就是这种情况),那么具有继承并由测试实例化的单独TestAdapter类是最佳实践。
还有其他问题的答案更深入:
https://softwareengineering.stackexchange.com/questions/154144/how-to-define-implementation-details