如何将要测试的类传递给单元测试类

时间:2018-03-13 07:09:47

标签: python unit-testing python-unittest

我有课,我需要测试它

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()

请建议替代方案以及为什么您更喜欢其中任何一种

2 个答案:

答案 0 :(得分:1)

如果不需要重新实例化,您可以在设置中创建类的实例 如果您必须在每个测试中创建一个新实例,那么只需在每个测试中创建一个新实例。

答案 1 :(得分:1)

使用继承和静态成员而不是为每个测试创建一个新对象有一个缺点:如果测试更改了对象的状态,那么测试会以副作用相互影响。如果测试方法调用的顺序无法保证和更改(例如,您重命名测试并且突然不同的测试用例失败 - 这些事情以前发生过!)

此外,让您的测试用例继承自SUT(受测试的主题)意味着您只能测试一个构造函数。

我认为测试用例继承自SUT没有任何好处,特别是在没有私有成员的python中。如果由于某种原因继承对于测试是必要的(有时候就是这种情况),那么具有继承并由测试实例化的单独TestAdapter类是最佳实践。

还有其他问题的答案更深入:

https://softwareengineering.stackexchange.com/questions/366425/making-a-test-fixture-inherit-from-the-sut-class

https://softwareengineering.stackexchange.com/questions/154144/how-to-define-implementation-details