如何将要测试的 class 传递给单元测试 class
how to pass a class to be tested to an unit test class
我有一个class,我需要测试一下
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()
我是根据示例设计这段代码的。
现在我不明白如何将测试 class MyFirstUnitTest
与要测试的 classe 连接起来 ToBeTested
?
通过继承?
class MyFirstUnitTest(unittest.TestCase,ToBeTested):
######
通过创建 class ToBeTested
的对象作为 ToBeTested
的静态成员
MyFirstUnitTest
class定义?
class MyFirstUnitTest(unittest.TestCase):
mytestobj=ToBeTested()
def setUp(self):
通过在每个测试中创建一个 class ToBeTested
的对象
MyFirstUnitTest
class 定义的案例?
class MyFirstUnitTest(unittest.TestCase):
def setUp(self):
###
def test_one():
mytestobj=ToBeTested()
def test_two():
mytestobj=ToBeTested()
请提出备选方案以及您偏爱其中任何一个的原因
如果不需要重新实例化,您可以在设置中创建 class(es) 的实例。
如果您必须在每个测试中创建一个新实例,那么只需在每个测试中创建一个新实例。
使用继承和静态成员而不是为每个测试创建一个新对象有一个缺点:如果测试改变了对象的状态,那么测试会相互影响并产生副作用。如果测试方法调用的顺序得不到保证并发生变化(例如,您重命名一个测试,突然另一个测试用例失败 - 这些事情以前发生过!),情况会变得更糟!)
此外,让您的测试用例继承自 SUT(被测对象)意味着您只能测试一个构造函数。
我认为从 SUT 继承测试用例没有任何优势,尤其是在没有私有成员的 python 中。如果由于某种原因测试需要继承(有时是这种情况),那么最好的做法是拥有一个单独的 TestAdapter class 继承并由测试实例化。
还有其他有更深入答案的问题:
https://softwareengineering.stackexchange.com/questions/154144/how-to-define-implementation-details
我有一个class,我需要测试一下
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()
我是根据示例设计这段代码的。
现在我不明白如何将测试 class MyFirstUnitTest
与要测试的 classe 连接起来 ToBeTested
?
通过继承?
class MyFirstUnitTest(unittest.TestCase,ToBeTested):
######
通过创建 class ToBeTested
的对象作为 ToBeTested
的静态成员
MyFirstUnitTest
class定义?
class MyFirstUnitTest(unittest.TestCase):
mytestobj=ToBeTested()
def setUp(self):
通过在每个测试中创建一个 class ToBeTested
的对象
MyFirstUnitTest
class 定义的案例?
class MyFirstUnitTest(unittest.TestCase):
def setUp(self):
###
def test_one():
mytestobj=ToBeTested()
def test_two():
mytestobj=ToBeTested()
请提出备选方案以及您偏爱其中任何一个的原因
如果不需要重新实例化,您可以在设置中创建 class(es) 的实例。
如果您必须在每个测试中创建一个新实例,那么只需在每个测试中创建一个新实例。
使用继承和静态成员而不是为每个测试创建一个新对象有一个缺点:如果测试改变了对象的状态,那么测试会相互影响并产生副作用。如果测试方法调用的顺序得不到保证并发生变化(例如,您重命名一个测试,突然另一个测试用例失败 - 这些事情以前发生过!),情况会变得更糟!)
此外,让您的测试用例继承自 SUT(被测对象)意味着您只能测试一个构造函数。
我认为从 SUT 继承测试用例没有任何优势,尤其是在没有私有成员的 python 中。如果由于某种原因测试需要继承(有时是这种情况),那么最好的做法是拥有一个单独的 TestAdapter class 继承并由测试实例化。
还有其他有更深入答案的问题:
https://softwareengineering.stackexchange.com/questions/154144/how-to-define-implementation-details