在函数内部进行pytest断言

时间:2017-12-10 21:50:25

标签: python unit-testing

我正在用Python开始测试驱动的开发,而且我在构建测试的方式上做错了。

我正在创建一个新类Corpus,其中包含一些documents,它们本身的类型为str。我开始测试以查看新的Corpus对象是否具有正确数量的文档:

path = "directory/of/test/data"
journal = Corpus(path)
entries = journal.documents

def document_presence():
    assert len(entries) > 200

此测试失败,因为没有编写代码。我能想到的最简单的代码是,

class Corpus:
    documents = range(201)

    def __init__(self, path):
        print("loaded")

到目前为止一切顺利。但是,当然,我的文档应该是字符串,而不是整数,所以我写了这个测试,期望它失败:

def document_structure(): 
    entry = entries[0]
    assert type(entry) == str

但是,它通过---它不应该!如果我没有将它包装在一个函数中,我检查它是否会按预期失败,如下所示:

entry = entries[0]
assert type(entry) == str

失败。

通过使用函数命名一个测试似乎是合理的,并且当我得到更多它们时,通过使用类将测试分组到集合中。将测试组织成值得信赖的断言的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您的测试功能从未执行过。

pytest的默认值是您的测试函数必须命名为test_<something>才能被pytest自动发现和执行。

以下是有关如何更改默认行为的详细信息:https://docs.pytest.org/en/latest/example/pythoncollection.html