相互依赖的测试方法

最后发布: 2017-01-24 17:11:14


问题

假设我有一个简单的数据结构Store其中有两种方法: addlist_all (在python中为示例):

class Store:
    def __init__(self):
        self.data = []
    def add(self, item):
        self.data.append(item)
    def list_all(self):
        return list(self.data)

测试其方法如下所示:

def test_add():
    store = Store()
    store.add("item1")
    items = store.list_all() 
    assert len(items) == 1
    assert items[0] == "item1"

def test_list_all():
    store = Store()
    store.add("item1")
    items = store.list_all() 
    assert len(items) == 1
    assert items[0] == "item1"

嗯,这些测试很尴尬,它们实际上具有相同的主体。 要测试list_all方法,我必须假定add已经正确运行,并且要测试add我必须使用list_all检查Store的状态。 您如何测试这些方法? 您是否仅编写了一个测试用例并说“这证明这两种方法都能正常工作”?

PS:这是一个理论问题。 我正在测试一个复杂的系统,由于这些问题,我找不到从哪里开始自下而上的方法。

unit-testing testing
回答

您永远不要通过调用另一个方法来测试一个方法。 test_addtest_list_all方法的目的应该是执行单元测试,这意味着检查单个软件单元(在此示例中为单个方法)的正确性。

因此,您应该找到另一种方法来测试方法的有效性。 理想情况下,单元测试应该尽可能简单,使用直接语句,而不要依赖于外部方法(可以更改)。

然后,您还可以编写一个集成测试,在其中调用不同的方法,并检查它们是否相互配合。