如何在涉及 class 数据的 python class 中测试顺序操作

How to test sequential operations in a python class involving class data

背景

我有一个 class,它对数据执行相当缓慢、复杂的操作。我想为此编写一些测试 class,但我很难找到合适的测试框架。

class有一个这样的界面:

class thing():

    def __init__(self, datafile):
        data = read datafile

    def a(self):
        self.data_a = expensive(self.data)

    def b(self):
        self.data_b = expensive(self.data_a)

    def c(self):
        self.data_c = expensive(self.data_b)

    etc...

我们使用这个 class 的方式是我们通常按顺序执行操作并分析结果,通常在每一步,通常在 jupyter notebook 中。

问题

如何测试具有这种结构的class中的方法?是否有构建顺序测试套件的框架/约定?

我试过了...

备注

我也在为这个问题寻找更好的标题的建议

也许您可以考虑使用 unitest 包中的 subtest 功能:

import unittest

class TestExpensive(unittest.TestCase):

    def setUp(self):
        generated_data = generate(data)
        generated_data.write(somewhere)
        self.t = thing(somewhere)

    def test_abc(self):
        with self.subTest(status_code='a'):
             self.t.a()
             # Verify self.t.data_a has required properties
             self.assertTrue(True) 

        with self.subTest(status_code='b'):
             self.t.b()
             # Verify self.t.data_b has required properties
             self.assertTrue(False)

您可以将所有昂贵的函数调用放在一个测试中,这样您就可以在测试过程中重用任何中间结果。此外,如果发生错误,您仍然可以通过 status_code 变量将其追溯到导致问题的子测试:

======================================================================
FAIL: test_abc (__main__.TestExpensive) (status_code='b')
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test.py", line 17, in test_abc
    self.assertTrue(False)
AssertionError: False is not true

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)