【问题标题】:Making pytest assertions inside functions [closed]在函数内部进行 pytest 断言[关闭]
【发布时间】: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


【解决方案1】:

您的测试函数从未执行过。

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

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

【讨论】:

  • 魔法词!谢谢你。我理解删除这个问题的举动;我还建议其他人也可能无法猜测 pytest 有这个约定。不管怎样,我的问题都解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多