【发布时间】:2017-12-10 21:50:24
【问题描述】:
我开始使用 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
那确实失败了。
使用函数来命名一个测试似乎是合理的,当我得到更多函数时,使用类将测试分组到集合中。将我的测试组织成可信断言的正确方法是什么?
【问题讨论】:
-
你的测试函数真的被发现了吗?还是第一个“测试”失败仅仅是因为代码 outside ?查看夹具,尤其是因为这可以防止在测试之间发生状态泄漏问题。
标签: python unit-testing