代码之家  ›  专栏  ›  技术社区  ›  00__00__00

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

  •  0
  • 00__00__00  · 技术社区  · 6 年前

    我有一门课,我需要测试一下

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

    我根据示例设计了此代码。 现在我不知道如何将其与tesing类接口 MyFirstUnitTest 与待测试的类别 ToBeTested ?

    通过继承?

      class MyFirstUnitTest(unittest.TestCase,ToBeTested):
           ######
    

    通过创建类的对象 待测试 作为的静态成员 MyFirstUnitTest 类别定义?

    class MyFirstUnitTest(unittest.TestCase):
        mytestobj=ToBeTested()
        def setUp(self):
    

    通过创建类的对象 待测试 在每次测试中 案例 MyFirstUnitTest 类别定义?

     class MyFirstUnitTest(unittest.TestCase):
    
        def setUp(self):
        ### 
        def test_one():
            mytestobj=ToBeTested()
        def test_two():
            mytestobj=ToBeTested()
    

    请提出备选方案,以及为什么您更喜欢其中任何一个

    2 回复  |  直到 6 年前
        1
  •  2
  •   kutschkem    6 年前

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

    此外,让您的测试用例继承自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

        2
  •  1
  •   Tvde1    6 年前

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